{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# HW1: 线性回归 -- Ames 房价预测"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1、导入必要的工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np  # 矩阵操作\n",
    "import pandas as pd # SQL数据处理\n",
    "\n",
    "#模型\n",
    "from sklearn.linear_model import LinearRegression, RidgeCV, LassoCV, ElasticNetCV\n",
    "\n",
    "#模型评估\n",
    "from sklearn.metrics import mean_squared_error\n",
    "\n",
    "import matplotlib.pyplot as plt   #画图\n",
    "import seaborn as sns\n",
    "\n",
    "# 图形出现在Notebook里而不是新窗口\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2、数据探索"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train_data：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Id</th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>LotFrontage</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>OverallQual</th>\n",
       "      <th>OverallCond</th>\n",
       "      <th>YearBuilt</th>\n",
       "      <th>YearRemodAdd</th>\n",
       "      <th>MasVnrArea</th>\n",
       "      <th>BsmtFinSF1</th>\n",
       "      <th>...</th>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <th>OpenPorchSF</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>3SsnPorch</th>\n",
       "      <th>ScreenPorch</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1201.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1452.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>730.500000</td>\n",
       "      <td>56.897260</td>\n",
       "      <td>70.049958</td>\n",
       "      <td>10516.828082</td>\n",
       "      <td>6.099315</td>\n",
       "      <td>5.575342</td>\n",
       "      <td>1971.267808</td>\n",
       "      <td>1984.865753</td>\n",
       "      <td>103.685262</td>\n",
       "      <td>443.639726</td>\n",
       "      <td>...</td>\n",
       "      <td>94.244521</td>\n",
       "      <td>46.660274</td>\n",
       "      <td>21.954110</td>\n",
       "      <td>3.409589</td>\n",
       "      <td>15.060959</td>\n",
       "      <td>2.758904</td>\n",
       "      <td>43.489041</td>\n",
       "      <td>6.321918</td>\n",
       "      <td>2007.815753</td>\n",
       "      <td>180921.195890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>421.610009</td>\n",
       "      <td>42.300571</td>\n",
       "      <td>24.284752</td>\n",
       "      <td>9981.264932</td>\n",
       "      <td>1.382997</td>\n",
       "      <td>1.112799</td>\n",
       "      <td>30.202904</td>\n",
       "      <td>20.645407</td>\n",
       "      <td>181.066207</td>\n",
       "      <td>456.098091</td>\n",
       "      <td>...</td>\n",
       "      <td>125.338794</td>\n",
       "      <td>66.256028</td>\n",
       "      <td>61.119149</td>\n",
       "      <td>29.317331</td>\n",
       "      <td>55.757415</td>\n",
       "      <td>40.177307</td>\n",
       "      <td>496.123024</td>\n",
       "      <td>2.703626</td>\n",
       "      <td>1.328095</td>\n",
       "      <td>79442.502883</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>1300.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1872.000000</td>\n",
       "      <td>1950.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2006.000000</td>\n",
       "      <td>34900.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>365.750000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>7553.500000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1954.000000</td>\n",
       "      <td>1967.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>2007.000000</td>\n",
       "      <td>129975.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>730.500000</td>\n",
       "      <td>50.000000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>9478.500000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1973.000000</td>\n",
       "      <td>1994.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>383.500000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>2008.000000</td>\n",
       "      <td>163000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1095.250000</td>\n",
       "      <td>70.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>11601.500000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2004.000000</td>\n",
       "      <td>166.000000</td>\n",
       "      <td>712.250000</td>\n",
       "      <td>...</td>\n",
       "      <td>168.000000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>2009.000000</td>\n",
       "      <td>214000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1460.000000</td>\n",
       "      <td>190.000000</td>\n",
       "      <td>313.000000</td>\n",
       "      <td>215245.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>9.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>1600.000000</td>\n",
       "      <td>5644.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>857.000000</td>\n",
       "      <td>547.000000</td>\n",
       "      <td>552.000000</td>\n",
       "      <td>508.000000</td>\n",
       "      <td>480.000000</td>\n",
       "      <td>738.000000</td>\n",
       "      <td>15500.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>755000.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 38 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                Id   MSSubClass  LotFrontage        LotArea  OverallQual  \\\n",
       "count  1460.000000  1460.000000  1201.000000    1460.000000  1460.000000   \n",
       "mean    730.500000    56.897260    70.049958   10516.828082     6.099315   \n",
       "std     421.610009    42.300571    24.284752    9981.264932     1.382997   \n",
       "min       1.000000    20.000000    21.000000    1300.000000     1.000000   \n",
       "25%     365.750000    20.000000    59.000000    7553.500000     5.000000   \n",
       "50%     730.500000    50.000000    69.000000    9478.500000     6.000000   \n",
       "75%    1095.250000    70.000000    80.000000   11601.500000     7.000000   \n",
       "max    1460.000000   190.000000   313.000000  215245.000000    10.000000   \n",
       "\n",
       "       OverallCond    YearBuilt  YearRemodAdd   MasVnrArea   BsmtFinSF1  \\\n",
       "count  1460.000000  1460.000000   1460.000000  1452.000000  1460.000000   \n",
       "mean      5.575342  1971.267808   1984.865753   103.685262   443.639726   \n",
       "std       1.112799    30.202904     20.645407   181.066207   456.098091   \n",
       "min       1.000000  1872.000000   1950.000000     0.000000     0.000000   \n",
       "25%       5.000000  1954.000000   1967.000000     0.000000     0.000000   \n",
       "50%       5.000000  1973.000000   1994.000000     0.000000   383.500000   \n",
       "75%       6.000000  2000.000000   2004.000000   166.000000   712.250000   \n",
       "max       9.000000  2010.000000   2010.000000  1600.000000  5644.000000   \n",
       "\n",
       "           ...         WoodDeckSF  OpenPorchSF  EnclosedPorch    3SsnPorch  \\\n",
       "count      ...        1460.000000  1460.000000    1460.000000  1460.000000   \n",
       "mean       ...          94.244521    46.660274      21.954110     3.409589   \n",
       "std        ...         125.338794    66.256028      61.119149    29.317331   \n",
       "min        ...           0.000000     0.000000       0.000000     0.000000   \n",
       "25%        ...           0.000000     0.000000       0.000000     0.000000   \n",
       "50%        ...           0.000000    25.000000       0.000000     0.000000   \n",
       "75%        ...         168.000000    68.000000       0.000000     0.000000   \n",
       "max        ...         857.000000   547.000000     552.000000   508.000000   \n",
       "\n",
       "       ScreenPorch     PoolArea       MiscVal       MoSold       YrSold  \\\n",
       "count  1460.000000  1460.000000   1460.000000  1460.000000  1460.000000   \n",
       "mean     15.060959     2.758904     43.489041     6.321918  2007.815753   \n",
       "std      55.757415    40.177307    496.123024     2.703626     1.328095   \n",
       "min       0.000000     0.000000      0.000000     1.000000  2006.000000   \n",
       "25%       0.000000     0.000000      0.000000     5.000000  2007.000000   \n",
       "50%       0.000000     0.000000      0.000000     6.000000  2008.000000   \n",
       "75%       0.000000     0.000000      0.000000     8.000000  2009.000000   \n",
       "max     480.000000   738.000000  15500.000000    12.000000  2010.000000   \n",
       "\n",
       "           SalePrice  \n",
       "count    1460.000000  \n",
       "mean   180921.195890  \n",
       "std     79442.502883  \n",
       "min     34900.000000  \n",
       "25%    129975.000000  \n",
       "50%    163000.000000  \n",
       "75%    214000.000000  \n",
       "max    755000.000000  \n",
       "\n",
       "[8 rows x 38 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 读入数据\n",
    "dpath = './Ames_House/'\n",
    "train_data = pd.read_csv(dpath + \"Ames_House_train.csv\")\n",
    "# 观察前5行，了解数据每列（特征）的概况\n",
    "print(\"train_data：\")\n",
    "train_data.describe()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1460 entries, 0 to 1459\n",
      "Data columns (total 81 columns):\n",
      "Id               1460 non-null int64\n",
      "MSSubClass       1460 non-null int64\n",
      "MSZoning         1460 non-null object\n",
      "LotFrontage      1201 non-null float64\n",
      "LotArea          1460 non-null int64\n",
      "Street           1460 non-null object\n",
      "Alley            91 non-null object\n",
      "LotShape         1460 non-null object\n",
      "LandContour      1460 non-null object\n",
      "Utilities        1460 non-null object\n",
      "LotConfig        1460 non-null object\n",
      "LandSlope        1460 non-null object\n",
      "Neighborhood     1460 non-null object\n",
      "Condition1       1460 non-null object\n",
      "Condition2       1460 non-null object\n",
      "BldgType         1460 non-null object\n",
      "HouseStyle       1460 non-null object\n",
      "OverallQual      1460 non-null int64\n",
      "OverallCond      1460 non-null int64\n",
      "YearBuilt        1460 non-null int64\n",
      "YearRemodAdd     1460 non-null int64\n",
      "RoofStyle        1460 non-null object\n",
      "RoofMatl         1460 non-null object\n",
      "Exterior1st      1460 non-null object\n",
      "Exterior2nd      1460 non-null object\n",
      "MasVnrType       1452 non-null object\n",
      "MasVnrArea       1452 non-null float64\n",
      "ExterQual        1460 non-null object\n",
      "ExterCond        1460 non-null object\n",
      "Foundation       1460 non-null object\n",
      "BsmtQual         1423 non-null object\n",
      "BsmtCond         1423 non-null object\n",
      "BsmtExposure     1422 non-null object\n",
      "BsmtFinType1     1423 non-null object\n",
      "BsmtFinSF1       1460 non-null int64\n",
      "BsmtFinType2     1422 non-null object\n",
      "BsmtFinSF2       1460 non-null int64\n",
      "BsmtUnfSF        1460 non-null int64\n",
      "TotalBsmtSF      1460 non-null int64\n",
      "Heating          1460 non-null object\n",
      "HeatingQC        1460 non-null object\n",
      "CentralAir       1460 non-null object\n",
      "Electrical       1459 non-null object\n",
      "1stFlrSF         1460 non-null int64\n",
      "2ndFlrSF         1460 non-null int64\n",
      "LowQualFinSF     1460 non-null int64\n",
      "GrLivArea        1460 non-null int64\n",
      "BsmtFullBath     1460 non-null int64\n",
      "BsmtHalfBath     1460 non-null int64\n",
      "FullBath         1460 non-null int64\n",
      "HalfBath         1460 non-null int64\n",
      "BedroomAbvGr     1460 non-null int64\n",
      "KitchenAbvGr     1460 non-null int64\n",
      "KitchenQual      1460 non-null object\n",
      "TotRmsAbvGrd     1460 non-null int64\n",
      "Functional       1460 non-null object\n",
      "Fireplaces       1460 non-null int64\n",
      "FireplaceQu      770 non-null object\n",
      "GarageType       1379 non-null object\n",
      "GarageYrBlt      1379 non-null float64\n",
      "GarageFinish     1379 non-null object\n",
      "GarageCars       1460 non-null int64\n",
      "GarageArea       1460 non-null int64\n",
      "GarageQual       1379 non-null object\n",
      "GarageCond       1379 non-null object\n",
      "PavedDrive       1460 non-null object\n",
      "WoodDeckSF       1460 non-null int64\n",
      "OpenPorchSF      1460 non-null int64\n",
      "EnclosedPorch    1460 non-null int64\n",
      "3SsnPorch        1460 non-null int64\n",
      "ScreenPorch      1460 non-null int64\n",
      "PoolArea         1460 non-null int64\n",
      "PoolQC           7 non-null object\n",
      "Fence            281 non-null object\n",
      "MiscFeature      54 non-null object\n",
      "MiscVal          1460 non-null int64\n",
      "MoSold           1460 non-null int64\n",
      "YrSold           1460 non-null int64\n",
      "SaleType         1460 non-null object\n",
      "SaleCondition    1460 non-null object\n",
      "SalePrice        1460 non-null int64\n",
      "dtypes: float64(3), int64(35), object(43)\n",
      "memory usage: 924.0+ KB\n"
     ]
    }
   ],
   "source": [
    "train_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test_data：\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Id</th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>LotFrontage</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>OverallQual</th>\n",
       "      <th>OverallCond</th>\n",
       "      <th>YearBuilt</th>\n",
       "      <th>YearRemodAdd</th>\n",
       "      <th>MasVnrArea</th>\n",
       "      <th>BsmtFinSF1</th>\n",
       "      <th>...</th>\n",
       "      <th>GarageArea</th>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <th>OpenPorchSF</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>3SsnPorch</th>\n",
       "      <th>ScreenPorch</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1232.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1444.000000</td>\n",
       "      <td>1458.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1458.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "      <td>1459.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>2190.000000</td>\n",
       "      <td>57.378341</td>\n",
       "      <td>68.580357</td>\n",
       "      <td>9819.161069</td>\n",
       "      <td>6.078821</td>\n",
       "      <td>5.553804</td>\n",
       "      <td>1971.357779</td>\n",
       "      <td>1983.662783</td>\n",
       "      <td>100.709141</td>\n",
       "      <td>439.203704</td>\n",
       "      <td>...</td>\n",
       "      <td>472.768861</td>\n",
       "      <td>93.174777</td>\n",
       "      <td>48.313914</td>\n",
       "      <td>24.243317</td>\n",
       "      <td>1.794380</td>\n",
       "      <td>17.064428</td>\n",
       "      <td>1.744345</td>\n",
       "      <td>58.167923</td>\n",
       "      <td>6.104181</td>\n",
       "      <td>2007.769705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>421.321334</td>\n",
       "      <td>42.746880</td>\n",
       "      <td>22.376841</td>\n",
       "      <td>4955.517327</td>\n",
       "      <td>1.436812</td>\n",
       "      <td>1.113740</td>\n",
       "      <td>30.390071</td>\n",
       "      <td>21.130467</td>\n",
       "      <td>177.625900</td>\n",
       "      <td>455.268042</td>\n",
       "      <td>...</td>\n",
       "      <td>217.048611</td>\n",
       "      <td>127.744882</td>\n",
       "      <td>68.883364</td>\n",
       "      <td>67.227765</td>\n",
       "      <td>20.207842</td>\n",
       "      <td>56.609763</td>\n",
       "      <td>30.491646</td>\n",
       "      <td>630.806978</td>\n",
       "      <td>2.722432</td>\n",
       "      <td>1.301740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1461.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>1470.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1950.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2006.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1825.500000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>58.000000</td>\n",
       "      <td>7391.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1953.000000</td>\n",
       "      <td>1963.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>318.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>2007.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>2190.000000</td>\n",
       "      <td>50.000000</td>\n",
       "      <td>67.000000</td>\n",
       "      <td>9399.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1973.000000</td>\n",
       "      <td>1992.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>350.500000</td>\n",
       "      <td>...</td>\n",
       "      <td>480.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>28.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>2008.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>2554.500000</td>\n",
       "      <td>70.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>11517.500000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>2001.000000</td>\n",
       "      <td>2004.000000</td>\n",
       "      <td>164.000000</td>\n",
       "      <td>753.500000</td>\n",
       "      <td>...</td>\n",
       "      <td>576.000000</td>\n",
       "      <td>168.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>2009.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2919.000000</td>\n",
       "      <td>190.000000</td>\n",
       "      <td>200.000000</td>\n",
       "      <td>56600.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>9.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>1290.000000</td>\n",
       "      <td>4010.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1488.000000</td>\n",
       "      <td>1424.000000</td>\n",
       "      <td>742.000000</td>\n",
       "      <td>1012.000000</td>\n",
       "      <td>360.000000</td>\n",
       "      <td>576.000000</td>\n",
       "      <td>800.000000</td>\n",
       "      <td>17000.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 37 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                Id   MSSubClass  LotFrontage       LotArea  OverallQual  \\\n",
       "count  1459.000000  1459.000000  1232.000000   1459.000000  1459.000000   \n",
       "mean   2190.000000    57.378341    68.580357   9819.161069     6.078821   \n",
       "std     421.321334    42.746880    22.376841   4955.517327     1.436812   \n",
       "min    1461.000000    20.000000    21.000000   1470.000000     1.000000   \n",
       "25%    1825.500000    20.000000    58.000000   7391.000000     5.000000   \n",
       "50%    2190.000000    50.000000    67.000000   9399.000000     6.000000   \n",
       "75%    2554.500000    70.000000    80.000000  11517.500000     7.000000   \n",
       "max    2919.000000   190.000000   200.000000  56600.000000    10.000000   \n",
       "\n",
       "       OverallCond    YearBuilt  YearRemodAdd   MasVnrArea   BsmtFinSF1  \\\n",
       "count  1459.000000  1459.000000   1459.000000  1444.000000  1458.000000   \n",
       "mean      5.553804  1971.357779   1983.662783   100.709141   439.203704   \n",
       "std       1.113740    30.390071     21.130467   177.625900   455.268042   \n",
       "min       1.000000  1879.000000   1950.000000     0.000000     0.000000   \n",
       "25%       5.000000  1953.000000   1963.000000     0.000000     0.000000   \n",
       "50%       5.000000  1973.000000   1992.000000     0.000000   350.500000   \n",
       "75%       6.000000  2001.000000   2004.000000   164.000000   753.500000   \n",
       "max       9.000000  2010.000000   2010.000000  1290.000000  4010.000000   \n",
       "\n",
       "          ...        GarageArea   WoodDeckSF  OpenPorchSF  EnclosedPorch  \\\n",
       "count     ...       1458.000000  1459.000000  1459.000000    1459.000000   \n",
       "mean      ...        472.768861    93.174777    48.313914      24.243317   \n",
       "std       ...        217.048611   127.744882    68.883364      67.227765   \n",
       "min       ...          0.000000     0.000000     0.000000       0.000000   \n",
       "25%       ...        318.000000     0.000000     0.000000       0.000000   \n",
       "50%       ...        480.000000     0.000000    28.000000       0.000000   \n",
       "75%       ...        576.000000   168.000000    72.000000       0.000000   \n",
       "max       ...       1488.000000  1424.000000   742.000000    1012.000000   \n",
       "\n",
       "         3SsnPorch  ScreenPorch     PoolArea       MiscVal       MoSold  \\\n",
       "count  1459.000000  1459.000000  1459.000000   1459.000000  1459.000000   \n",
       "mean      1.794380    17.064428     1.744345     58.167923     6.104181   \n",
       "std      20.207842    56.609763    30.491646    630.806978     2.722432   \n",
       "min       0.000000     0.000000     0.000000      0.000000     1.000000   \n",
       "25%       0.000000     0.000000     0.000000      0.000000     4.000000   \n",
       "50%       0.000000     0.000000     0.000000      0.000000     6.000000   \n",
       "75%       0.000000     0.000000     0.000000      0.000000     8.000000   \n",
       "max     360.000000   576.000000   800.000000  17000.000000    12.000000   \n",
       "\n",
       "            YrSold  \n",
       "count  1459.000000  \n",
       "mean   2007.769705  \n",
       "std       1.301740  \n",
       "min    2006.000000  \n",
       "25%    2007.000000  \n",
       "50%    2008.000000  \n",
       "75%    2009.000000  \n",
       "max    2010.000000  \n",
       "\n",
       "[8 rows x 37 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data = pd.read_csv(dpath + \"Ames_House_test.csv\")\n",
    "print(\"test_data：\")\n",
    "test_data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1459 entries, 0 to 1458\n",
      "Data columns (total 80 columns):\n",
      "Id               1459 non-null int64\n",
      "MSSubClass       1459 non-null int64\n",
      "MSZoning         1455 non-null object\n",
      "LotFrontage      1232 non-null float64\n",
      "LotArea          1459 non-null int64\n",
      "Street           1459 non-null object\n",
      "Alley            107 non-null object\n",
      "LotShape         1459 non-null object\n",
      "LandContour      1459 non-null object\n",
      "Utilities        1457 non-null object\n",
      "LotConfig        1459 non-null object\n",
      "LandSlope        1459 non-null object\n",
      "Neighborhood     1459 non-null object\n",
      "Condition1       1459 non-null object\n",
      "Condition2       1459 non-null object\n",
      "BldgType         1459 non-null object\n",
      "HouseStyle       1459 non-null object\n",
      "OverallQual      1459 non-null int64\n",
      "OverallCond      1459 non-null int64\n",
      "YearBuilt        1459 non-null int64\n",
      "YearRemodAdd     1459 non-null int64\n",
      "RoofStyle        1459 non-null object\n",
      "RoofMatl         1459 non-null object\n",
      "Exterior1st      1458 non-null object\n",
      "Exterior2nd      1458 non-null object\n",
      "MasVnrType       1443 non-null object\n",
      "MasVnrArea       1444 non-null float64\n",
      "ExterQual        1459 non-null object\n",
      "ExterCond        1459 non-null object\n",
      "Foundation       1459 non-null object\n",
      "BsmtQual         1415 non-null object\n",
      "BsmtCond         1414 non-null object\n",
      "BsmtExposure     1415 non-null object\n",
      "BsmtFinType1     1417 non-null object\n",
      "BsmtFinSF1       1458 non-null float64\n",
      "BsmtFinType2     1417 non-null object\n",
      "BsmtFinSF2       1458 non-null float64\n",
      "BsmtUnfSF        1458 non-null float64\n",
      "TotalBsmtSF      1458 non-null float64\n",
      "Heating          1459 non-null object\n",
      "HeatingQC        1459 non-null object\n",
      "CentralAir       1459 non-null object\n",
      "Electrical       1459 non-null object\n",
      "1stFlrSF         1459 non-null int64\n",
      "2ndFlrSF         1459 non-null int64\n",
      "LowQualFinSF     1459 non-null int64\n",
      "GrLivArea        1459 non-null int64\n",
      "BsmtFullBath     1457 non-null float64\n",
      "BsmtHalfBath     1457 non-null float64\n",
      "FullBath         1459 non-null int64\n",
      "HalfBath         1459 non-null int64\n",
      "BedroomAbvGr     1459 non-null int64\n",
      "KitchenAbvGr     1459 non-null int64\n",
      "KitchenQual      1458 non-null object\n",
      "TotRmsAbvGrd     1459 non-null int64\n",
      "Functional       1457 non-null object\n",
      "Fireplaces       1459 non-null int64\n",
      "FireplaceQu      729 non-null object\n",
      "GarageType       1383 non-null object\n",
      "GarageYrBlt      1381 non-null float64\n",
      "GarageFinish     1381 non-null object\n",
      "GarageCars       1458 non-null float64\n",
      "GarageArea       1458 non-null float64\n",
      "GarageQual       1381 non-null object\n",
      "GarageCond       1381 non-null object\n",
      "PavedDrive       1459 non-null object\n",
      "WoodDeckSF       1459 non-null int64\n",
      "OpenPorchSF      1459 non-null int64\n",
      "EnclosedPorch    1459 non-null int64\n",
      "3SsnPorch        1459 non-null int64\n",
      "ScreenPorch      1459 non-null int64\n",
      "PoolArea         1459 non-null int64\n",
      "PoolQC           3 non-null object\n",
      "Fence            290 non-null object\n",
      "MiscFeature      51 non-null object\n",
      "MiscVal          1459 non-null int64\n",
      "MoSold           1459 non-null int64\n",
      "YrSold           1459 non-null int64\n",
      "SaleType         1458 non-null object\n",
      "SaleCondition    1459 non-null object\n",
      "dtypes: float64(11), int64(26), object(43)\n",
      "memory usage: 912.0+ KB\n"
     ]
    }
   ],
   "source": [
    "test_data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "小结：   \n",
    "1、部分特征为类别特征，需要进行数值化，如，房地产建筑类别MSSubClass、地区分类MSZoning、所在道路的类型Street等；   \n",
    "2、Id为序列号，无实际含义，可以删除此特征；    \n",
    "3、部分属性存在缺失。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 删除训练和测试数据中的ID特征\n",
    "train_data.drop(['Id'], axis = 1, inplace = True)\n",
    "test_data.drop(['Id'], axis = 1, inplace = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 分离x特征和y预测真值\n",
    "x_train = train_data.drop(['SalePrice'], axis = 1, inplace = False)\n",
    "y_train = train_data['SalePrice']\n",
    "x_test = test_data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "小结：    \n",
    "测试数据未提供真值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  2.2 数据基本信息\n",
    "样本数目、特征维数\n",
    "每个特征的类型、空值样本的数目、数据类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1460, 79)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1460,)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1459, 79)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count      1460.000000\n",
       "mean     180921.195890\n",
       "std       79442.502883\n",
       "min       34900.000000\n",
       "25%      129975.000000\n",
       "50%      163000.000000\n",
       "75%      214000.000000\n",
       "max      755000.000000\n",
       "Name: SalePrice, dtype: float64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n",
      "  warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x19f1e286198>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 观察房屋价格分布\n",
    "sns.distplot(y_train) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由图中可以看出，房屋价格y属性近似偏移的正态分布。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练数据真值y偏态Skewness : 1.882876 \n",
      "训练数据真值y峰度Kurtosis : 6.536282 \n"
     ]
    }
   ],
   "source": [
    "#show skewness and Kurtosis  偏态和峰度  \n",
    "print(\"训练数据真值y偏态Skewness : %f \" % y_train.skew())  \n",
    "print(\"训练数据真值y峰度Kurtosis : %f \" % y_train.kurt()) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练数据：\n",
      "\n",
      "\n",
      "MSZoning属性的不同取值和出现的次数\n",
      "RL         1151\n",
      "RM          218\n",
      "FV           65\n",
      "RH           16\n",
      "C (all)      10\n",
      "Name: MSZoning, dtype: int64\n",
      "\n",
      "Street属性的不同取值和出现的次数\n",
      "Pave    1454\n",
      "Grvl       6\n",
      "Name: Street, dtype: int64\n",
      "\n",
      "Alley属性的不同取值和出现的次数\n",
      "Grvl    50\n",
      "Pave    41\n",
      "Name: Alley, dtype: int64\n",
      "\n",
      "LotShape属性的不同取值和出现的次数\n",
      "Reg    925\n",
      "IR1    484\n",
      "IR2     41\n",
      "IR3     10\n",
      "Name: LotShape, dtype: int64\n",
      "\n",
      "LandContour属性的不同取值和出现的次数\n",
      "Lvl    1311\n",
      "Bnk      63\n",
      "HLS      50\n",
      "Low      36\n",
      "Name: LandContour, dtype: int64\n",
      "\n",
      "Utilities属性的不同取值和出现的次数\n",
      "AllPub    1459\n",
      "NoSeWa       1\n",
      "Name: Utilities, dtype: int64\n",
      "\n",
      "LotConfig属性的不同取值和出现的次数\n",
      "Inside     1052\n",
      "Corner      263\n",
      "CulDSac      94\n",
      "FR2          47\n",
      "FR3           4\n",
      "Name: LotConfig, dtype: int64\n",
      "\n",
      "LandSlope属性的不同取值和出现的次数\n",
      "Gtl    1382\n",
      "Mod      65\n",
      "Sev      13\n",
      "Name: LandSlope, dtype: int64\n",
      "\n",
      "Neighborhood属性的不同取值和出现的次数\n",
      "NAmes      225\n",
      "CollgCr    150\n",
      "OldTown    113\n",
      "Edwards    100\n",
      "Somerst     86\n",
      "Gilbert     79\n",
      "NridgHt     77\n",
      "Sawyer      74\n",
      "NWAmes      73\n",
      "SawyerW     59\n",
      "BrkSide     58\n",
      "Crawfor     51\n",
      "Mitchel     49\n",
      "NoRidge     41\n",
      "Timber      38\n",
      "IDOTRR      37\n",
      "ClearCr     28\n",
      "SWISU       25\n",
      "StoneBr     25\n",
      "MeadowV     17\n",
      "Blmngtn     17\n",
      "BrDale      16\n",
      "Veenker     11\n",
      "NPkVill      9\n",
      "Blueste      2\n",
      "Name: Neighborhood, dtype: int64\n",
      "\n",
      "Condition1属性的不同取值和出现的次数\n",
      "Norm      1260\n",
      "Feedr       81\n",
      "Artery      48\n",
      "RRAn        26\n",
      "PosN        19\n",
      "RRAe        11\n",
      "PosA         8\n",
      "RRNn         5\n",
      "RRNe         2\n",
      "Name: Condition1, dtype: int64\n",
      "\n",
      "Condition2属性的不同取值和出现的次数\n",
      "Norm      1445\n",
      "Feedr        6\n",
      "PosN         2\n",
      "Artery       2\n",
      "RRNn         2\n",
      "PosA         1\n",
      "RRAe         1\n",
      "RRAn         1\n",
      "Name: Condition2, dtype: int64\n",
      "\n",
      "BldgType属性的不同取值和出现的次数\n",
      "1Fam      1220\n",
      "TwnhsE     114\n",
      "Duplex      52\n",
      "Twnhs       43\n",
      "2fmCon      31\n",
      "Name: BldgType, dtype: int64\n",
      "\n",
      "HouseStyle属性的不同取值和出现的次数\n",
      "1Story    726\n",
      "2Story    445\n",
      "1.5Fin    154\n",
      "SLvl       65\n",
      "SFoyer     37\n",
      "1.5Unf     14\n",
      "2.5Unf     11\n",
      "2.5Fin      8\n",
      "Name: HouseStyle, dtype: int64\n",
      "\n",
      "RoofStyle属性的不同取值和出现的次数\n",
      "Gable      1141\n",
      "Hip         286\n",
      "Flat         13\n",
      "Gambrel      11\n",
      "Mansard       7\n",
      "Shed          2\n",
      "Name: RoofStyle, dtype: int64\n",
      "\n",
      "RoofMatl属性的不同取值和出现的次数\n",
      "CompShg    1434\n",
      "Tar&Grv      11\n",
      "WdShngl       6\n",
      "WdShake       5\n",
      "Membran       1\n",
      "Metal         1\n",
      "Roll          1\n",
      "ClyTile       1\n",
      "Name: RoofMatl, dtype: int64\n",
      "\n",
      "Exterior1st属性的不同取值和出现的次数\n",
      "VinylSd    515\n",
      "HdBoard    222\n",
      "MetalSd    220\n",
      "Wd Sdng    206\n",
      "Plywood    108\n",
      "CemntBd     61\n",
      "BrkFace     50\n",
      "WdShing     26\n",
      "Stucco      25\n",
      "AsbShng     20\n",
      "Stone        2\n",
      "BrkComm      2\n",
      "AsphShn      1\n",
      "ImStucc      1\n",
      "CBlock       1\n",
      "Name: Exterior1st, dtype: int64\n",
      "\n",
      "Exterior2nd属性的不同取值和出现的次数\n",
      "VinylSd    504\n",
      "MetalSd    214\n",
      "HdBoard    207\n",
      "Wd Sdng    197\n",
      "Plywood    142\n",
      "CmentBd     60\n",
      "Wd Shng     38\n",
      "Stucco      26\n",
      "BrkFace     25\n",
      "AsbShng     20\n",
      "ImStucc     10\n",
      "Brk Cmn      7\n",
      "Stone        5\n",
      "AsphShn      3\n",
      "Other        1\n",
      "CBlock       1\n",
      "Name: Exterior2nd, dtype: int64\n",
      "\n",
      "MasVnrType属性的不同取值和出现的次数\n",
      "None       864\n",
      "BrkFace    445\n",
      "Stone      128\n",
      "BrkCmn      15\n",
      "Name: MasVnrType, dtype: int64\n",
      "\n",
      "ExterQual属性的不同取值和出现的次数\n",
      "TA    906\n",
      "Gd    488\n",
      "Ex     52\n",
      "Fa     14\n",
      "Name: ExterQual, dtype: int64\n",
      "\n",
      "ExterCond属性的不同取值和出现的次数\n",
      "TA    1282\n",
      "Gd     146\n",
      "Fa      28\n",
      "Ex       3\n",
      "Po       1\n",
      "Name: ExterCond, dtype: int64\n",
      "\n",
      "Foundation属性的不同取值和出现的次数\n",
      "PConc     647\n",
      "CBlock    634\n",
      "BrkTil    146\n",
      "Slab       24\n",
      "Stone       6\n",
      "Wood        3\n",
      "Name: Foundation, dtype: int64\n",
      "\n",
      "BsmtQual属性的不同取值和出现的次数\n",
      "TA    649\n",
      "Gd    618\n",
      "Ex    121\n",
      "Fa     35\n",
      "Name: BsmtQual, dtype: int64\n",
      "\n",
      "BsmtCond属性的不同取值和出现的次数\n",
      "TA    1311\n",
      "Gd      65\n",
      "Fa      45\n",
      "Po       2\n",
      "Name: BsmtCond, dtype: int64\n",
      "\n",
      "BsmtExposure属性的不同取值和出现的次数\n",
      "No    953\n",
      "Av    221\n",
      "Gd    134\n",
      "Mn    114\n",
      "Name: BsmtExposure, dtype: int64\n",
      "\n",
      "BsmtFinType1属性的不同取值和出现的次数\n",
      "Unf    430\n",
      "GLQ    418\n",
      "ALQ    220\n",
      "BLQ    148\n",
      "Rec    133\n",
      "LwQ     74\n",
      "Name: BsmtFinType1, dtype: int64\n",
      "\n",
      "BsmtFinType2属性的不同取值和出现的次数\n",
      "Unf    1256\n",
      "Rec      54\n",
      "LwQ      46\n",
      "BLQ      33\n",
      "ALQ      19\n",
      "GLQ      14\n",
      "Name: BsmtFinType2, dtype: int64\n",
      "\n",
      "Heating属性的不同取值和出现的次数\n",
      "GasA     1428\n",
      "GasW       18\n",
      "Grav        7\n",
      "Wall        4\n",
      "OthW        2\n",
      "Floor       1\n",
      "Name: Heating, dtype: int64\n",
      "\n",
      "HeatingQC属性的不同取值和出现的次数\n",
      "Ex    741\n",
      "TA    428\n",
      "Gd    241\n",
      "Fa     49\n",
      "Po      1\n",
      "Name: HeatingQC, dtype: int64\n",
      "\n",
      "CentralAir属性的不同取值和出现的次数\n",
      "Y    1365\n",
      "N      95\n",
      "Name: CentralAir, dtype: int64\n",
      "\n",
      "Electrical属性的不同取值和出现的次数\n",
      "SBrkr    1334\n",
      "FuseA      94\n",
      "FuseF      27\n",
      "FuseP       3\n",
      "Mix         1\n",
      "Name: Electrical, dtype: int64\n",
      "\n",
      "KitchenQual属性的不同取值和出现的次数\n",
      "TA    735\n",
      "Gd    586\n",
      "Ex    100\n",
      "Fa     39\n",
      "Name: KitchenQual, dtype: int64\n",
      "\n",
      "Functional属性的不同取值和出现的次数\n",
      "Typ     1360\n",
      "Min2      34\n",
      "Min1      31\n",
      "Mod       15\n",
      "Maj1      14\n",
      "Maj2       5\n",
      "Sev        1\n",
      "Name: Functional, dtype: int64\n",
      "\n",
      "FireplaceQu属性的不同取值和出现的次数\n",
      "Gd    380\n",
      "TA    313\n",
      "Fa     33\n",
      "Ex     24\n",
      "Po     20\n",
      "Name: FireplaceQu, dtype: int64\n",
      "\n",
      "GarageType属性的不同取值和出现的次数\n",
      "Attchd     870\n",
      "Detchd     387\n",
      "BuiltIn     88\n",
      "Basment     19\n",
      "CarPort      9\n",
      "2Types       6\n",
      "Name: GarageType, dtype: int64\n",
      "\n",
      "GarageFinish属性的不同取值和出现的次数\n",
      "Unf    605\n",
      "RFn    422\n",
      "Fin    352\n",
      "Name: GarageFinish, dtype: int64\n",
      "\n",
      "GarageQual属性的不同取值和出现的次数\n",
      "TA    1311\n",
      "Fa      48\n",
      "Gd      14\n",
      "Ex       3\n",
      "Po       3\n",
      "Name: GarageQual, dtype: int64\n",
      "\n",
      "GarageCond属性的不同取值和出现的次数\n",
      "TA    1326\n",
      "Fa      35\n",
      "Gd       9\n",
      "Po       7\n",
      "Ex       2\n",
      "Name: GarageCond, dtype: int64\n",
      "\n",
      "PavedDrive属性的不同取值和出现的次数\n",
      "Y    1340\n",
      "N      90\n",
      "P      30\n",
      "Name: PavedDrive, dtype: int64\n",
      "\n",
      "PoolQC属性的不同取值和出现的次数\n",
      "Gd    3\n",
      "Ex    2\n",
      "Fa    2\n",
      "Name: PoolQC, dtype: int64\n",
      "\n",
      "Fence属性的不同取值和出现的次数\n",
      "MnPrv    157\n",
      "GdPrv     59\n",
      "GdWo      54\n",
      "MnWw      11\n",
      "Name: Fence, dtype: int64\n",
      "\n",
      "MiscFeature属性的不同取值和出现的次数\n",
      "Shed    49\n",
      "Gar2     2\n",
      "Othr     2\n",
      "TenC     1\n",
      "Name: MiscFeature, dtype: int64\n",
      "\n",
      "SaleType属性的不同取值和出现的次数\n",
      "WD       1267\n",
      "New       122\n",
      "COD        43\n",
      "ConLD       9\n",
      "ConLw       5\n",
      "ConLI       5\n",
      "CWD         4\n",
      "Oth         3\n",
      "Con         2\n",
      "Name: SaleType, dtype: int64\n",
      "\n",
      "SaleCondition属性的不同取值和出现的次数\n",
      "Normal     1198\n",
      "Partial     125\n",
      "Abnorml     101\n",
      "Family       20\n",
      "Alloca       12\n",
      "AdjLand       4\n",
      "Name: SaleCondition, dtype: int64\n",
      "测试数据：\n",
      "\n",
      "\n",
      "MSZoning属性的不同取值和出现的次数\n",
      "RL         1114\n",
      "RM          242\n",
      "FV           74\n",
      "C (all)      15\n",
      "RH           10\n",
      "Name: MSZoning, dtype: int64\n",
      "\n",
      "Street属性的不同取值和出现的次数\n",
      "Pave    1453\n",
      "Grvl       6\n",
      "Name: Street, dtype: int64\n",
      "\n",
      "Alley属性的不同取值和出现的次数\n",
      "Grvl    70\n",
      "Pave    37\n",
      "Name: Alley, dtype: int64\n",
      "\n",
      "LotShape属性的不同取值和出现的次数\n",
      "Reg    934\n",
      "IR1    484\n",
      "IR2     35\n",
      "IR3      6\n",
      "Name: LotShape, dtype: int64\n",
      "\n",
      "LandContour属性的不同取值和出现的次数\n",
      "Lvl    1311\n",
      "HLS      70\n",
      "Bnk      54\n",
      "Low      24\n",
      "Name: LandContour, dtype: int64\n",
      "\n",
      "Utilities属性的不同取值和出现的次数\n",
      "AllPub    1457\n",
      "Name: Utilities, dtype: int64\n",
      "\n",
      "LotConfig属性的不同取值和出现的次数\n",
      "Inside     1081\n",
      "Corner      248\n",
      "CulDSac      82\n",
      "FR2          38\n",
      "FR3          10\n",
      "Name: LotConfig, dtype: int64\n",
      "\n",
      "LandSlope属性的不同取值和出现的次数\n",
      "Gtl    1396\n",
      "Mod      60\n",
      "Sev       3\n",
      "Name: LandSlope, dtype: int64\n",
      "\n",
      "Neighborhood属性的不同取值和出现的次数\n",
      "NAmes      218\n",
      "OldTown    126\n",
      "CollgCr    117\n",
      "Somerst     96\n",
      "Edwards     94\n",
      "NridgHt     89\n",
      "Gilbert     86\n",
      "Sawyer      77\n",
      "SawyerW     66\n",
      "Mitchel     65\n",
      "NWAmes      58\n",
      "IDOTRR      56\n",
      "Crawfor     52\n",
      "BrkSide     50\n",
      "Timber      34\n",
      "NoRidge     30\n",
      "StoneBr     26\n",
      "SWISU       23\n",
      "MeadowV     20\n",
      "ClearCr     16\n",
      "NPkVill     14\n",
      "BrDale      14\n",
      "Veenker     13\n",
      "Blmngtn     11\n",
      "Blueste      8\n",
      "Name: Neighborhood, dtype: int64\n",
      "\n",
      "Condition1属性的不同取值和出现的次数\n",
      "Norm      1251\n",
      "Feedr       83\n",
      "Artery      44\n",
      "RRAn        24\n",
      "PosN        20\n",
      "RRAe        17\n",
      "PosA        12\n",
      "RRNe         4\n",
      "RRNn         4\n",
      "Name: Condition1, dtype: int64\n",
      "\n",
      "Condition2属性的不同取值和出现的次数\n",
      "Norm      1444\n",
      "Feedr        7\n",
      "PosA         3\n",
      "Artery       3\n",
      "PosN         2\n",
      "Name: Condition2, dtype: int64\n",
      "\n",
      "BldgType属性的不同取值和出现的次数\n",
      "1Fam      1205\n",
      "TwnhsE     113\n",
      "Duplex      57\n",
      "Twnhs       53\n",
      "2fmCon      31\n",
      "Name: BldgType, dtype: int64\n",
      "\n",
      "HouseStyle属性的不同取值和出现的次数\n",
      "1Story    745\n",
      "2Story    427\n",
      "1.5Fin    160\n",
      "SLvl       63\n",
      "SFoyer     46\n",
      "2.5Unf     13\n",
      "1.5Unf      5\n",
      "Name: HouseStyle, dtype: int64\n",
      "\n",
      "RoofStyle属性的不同取值和出现的次数\n",
      "Gable      1169\n",
      "Hip         265\n",
      "Gambrel      11\n",
      "Flat          7\n",
      "Mansard       4\n",
      "Shed          3\n",
      "Name: RoofStyle, dtype: int64\n",
      "\n",
      "RoofMatl属性的不同取值和出现的次数\n",
      "CompShg    1442\n",
      "Tar&Grv      12\n",
      "WdShake       4\n",
      "WdShngl       1\n",
      "Name: RoofMatl, dtype: int64\n",
      "\n",
      "Exterior1st属性的不同取值和出现的次数\n",
      "VinylSd    510\n",
      "MetalSd    230\n",
      "HdBoard    220\n",
      "Wd Sdng    205\n",
      "Plywood    113\n",
      "CemntBd     65\n",
      "BrkFace     37\n",
      "WdShing     30\n",
      "AsbShng     24\n",
      "Stucco      18\n",
      "BrkComm      4\n",
      "AsphShn      1\n",
      "CBlock       1\n",
      "Name: Exterior1st, dtype: int64\n",
      "\n",
      "Exterior2nd属性的不同取值和出现的次数\n",
      "VinylSd    510\n",
      "MetalSd    233\n",
      "HdBoard    199\n",
      "Wd Sdng    194\n",
      "Plywood    128\n",
      "CmentBd     66\n",
      "Wd Shng     43\n",
      "BrkFace     22\n",
      "Stucco      21\n",
      "AsbShng     18\n",
      "Brk Cmn     15\n",
      "ImStucc      5\n",
      "CBlock       2\n",
      "Stone        1\n",
      "AsphShn      1\n",
      "Name: Exterior2nd, dtype: int64\n",
      "\n",
      "MasVnrType属性的不同取值和出现的次数\n",
      "None       878\n",
      "BrkFace    434\n",
      "Stone      121\n",
      "BrkCmn      10\n",
      "Name: MasVnrType, dtype: int64\n",
      "\n",
      "ExterQual属性的不同取值和出现的次数\n",
      "TA    892\n",
      "Gd    491\n",
      "Ex     55\n",
      "Fa     21\n",
      "Name: ExterQual, dtype: int64\n",
      "\n",
      "ExterCond属性的不同取值和出现的次数\n",
      "TA    1256\n",
      "Gd     153\n",
      "Fa      39\n",
      "Ex       9\n",
      "Po       2\n",
      "Name: ExterCond, dtype: int64\n",
      "\n",
      "Foundation属性的不同取值和出现的次数\n",
      "PConc     661\n",
      "CBlock    601\n",
      "BrkTil    165\n",
      "Slab       25\n",
      "Stone       5\n",
      "Wood        2\n",
      "Name: Foundation, dtype: int64\n",
      "\n",
      "BsmtQual属性的不同取值和出现的次数\n",
      "TA    634\n",
      "Gd    591\n",
      "Ex    137\n",
      "Fa     53\n",
      "Name: BsmtQual, dtype: int64\n",
      "\n",
      "BsmtCond属性的不同取值和出现的次数\n",
      "TA    1295\n",
      "Fa      59\n",
      "Gd      57\n",
      "Po       3\n",
      "Name: BsmtCond, dtype: int64\n",
      "\n",
      "BsmtExposure属性的不同取值和出现的次数\n",
      "No    951\n",
      "Av    197\n",
      "Gd    142\n",
      "Mn    125\n",
      "Name: BsmtExposure, dtype: int64\n",
      "\n",
      "BsmtFinType1属性的不同取值和出现的次数\n",
      "GLQ    431\n",
      "Unf    421\n",
      "ALQ    209\n",
      "Rec    155\n",
      "BLQ    121\n",
      "LwQ     80\n",
      "Name: BsmtFinType1, dtype: int64\n",
      "\n",
      "BsmtFinType2属性的不同取值和出现的次数\n",
      "Unf    1237\n",
      "Rec      51\n",
      "LwQ      41\n",
      "BLQ      35\n",
      "ALQ      33\n",
      "GLQ      20\n",
      "Name: BsmtFinType2, dtype: int64\n",
      "\n",
      "Heating属性的不同取值和出现的次数\n",
      "GasA    1446\n",
      "GasW       9\n",
      "Grav       2\n",
      "Wall       2\n",
      "Name: Heating, dtype: int64\n",
      "\n",
      "HeatingQC属性的不同取值和出现的次数\n",
      "Ex    752\n",
      "TA    429\n",
      "Gd    233\n",
      "Fa     43\n",
      "Po      2\n",
      "Name: HeatingQC, dtype: int64\n",
      "\n",
      "CentralAir属性的不同取值和出现的次数\n",
      "Y    1358\n",
      "N     101\n",
      "Name: CentralAir, dtype: int64\n",
      "\n",
      "Electrical属性的不同取值和出现的次数\n",
      "SBrkr    1337\n",
      "FuseA      94\n",
      "FuseF      23\n",
      "FuseP       5\n",
      "Name: Electrical, dtype: int64\n",
      "\n",
      "KitchenQual属性的不同取值和出现的次数\n",
      "TA    757\n",
      "Gd    565\n",
      "Ex    105\n",
      "Fa     31\n",
      "Name: KitchenQual, dtype: int64\n",
      "\n",
      "Functional属性的不同取值和出现的次数\n",
      "Typ     1357\n",
      "Min2      36\n",
      "Min1      34\n",
      "Mod       20\n",
      "Maj1       5\n",
      "Maj2       4\n",
      "Sev        1\n",
      "Name: Functional, dtype: int64\n",
      "\n",
      "FireplaceQu属性的不同取值和出现的次数\n",
      "Gd    364\n",
      "TA    279\n",
      "Fa     41\n",
      "Po     26\n",
      "Ex     19\n",
      "Name: FireplaceQu, dtype: int64\n",
      "\n",
      "GarageType属性的不同取值和出现的次数\n",
      "Attchd     853\n",
      "Detchd     392\n",
      "BuiltIn     98\n",
      "2Types      17\n",
      "Basment     17\n",
      "CarPort      6\n",
      "Name: GarageType, dtype: int64\n",
      "\n",
      "GarageFinish属性的不同取值和出现的次数\n",
      "Unf    625\n",
      "RFn    389\n",
      "Fin    367\n",
      "Name: GarageFinish, dtype: int64\n",
      "\n",
      "GarageQual属性的不同取值和出现的次数\n",
      "TA    1293\n",
      "Fa      76\n",
      "Gd      10\n",
      "Po       2\n",
      "Name: GarageQual, dtype: int64\n",
      "\n",
      "GarageCond属性的不同取值和出现的次数\n",
      "TA    1328\n",
      "Fa      39\n",
      "Po       7\n",
      "Gd       6\n",
      "Ex       1\n",
      "Name: GarageCond, dtype: int64\n",
      "\n",
      "PavedDrive属性的不同取值和出现的次数\n",
      "Y    1301\n",
      "N     126\n",
      "P      32\n",
      "Name: PavedDrive, dtype: int64\n",
      "\n",
      "PoolQC属性的不同取值和出现的次数\n",
      "Ex    2\n",
      "Gd    1\n",
      "Name: PoolQC, dtype: int64\n",
      "\n",
      "Fence属性的不同取值和出现的次数\n",
      "MnPrv    172\n",
      "GdPrv     59\n",
      "GdWo      58\n",
      "MnWw       1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Name: Fence, dtype: int64\n",
      "\n",
      "MiscFeature属性的不同取值和出现的次数\n",
      "Shed    46\n",
      "Gar2     3\n",
      "Othr     2\n",
      "Name: MiscFeature, dtype: int64\n",
      "\n",
      "SaleType属性的不同取值和出现的次数\n",
      "WD       1258\n",
      "New       117\n",
      "COD        44\n",
      "ConLD      17\n",
      "CWD         8\n",
      "Oth         4\n",
      "ConLI       4\n",
      "Con         3\n",
      "ConLw       3\n",
      "Name: SaleType, dtype: int64\n",
      "\n",
      "SaleCondition属性的不同取值和出现的次数\n",
      "Normal     1204\n",
      "Partial     120\n",
      "Abnorml      89\n",
      "Family       26\n",
      "Alloca       12\n",
      "AdjLand       8\n",
      "Name: SaleCondition, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "categorical_features_train = x_train.select_dtypes(include = [\"object\"]).columns\n",
    "print(\"训练数据：\\n\")\n",
    "for col in categorical_features_train:\n",
    "    print (\"\\n%s属性的不同取值和出现的次数\" % col)\n",
    "    print (x_train[col].value_counts())\n",
    "    \n",
    "categorical_features_test = x_test.select_dtypes(include = [\"object\"]).columns\n",
    "print(\"测试数据：\\n\")\n",
    "for col in categorical_features_test:\n",
    "    print (\"\\n%s属性的不同取值和出现的次数\" % col)\n",
    "    print (x_test[col].value_counts())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 数据探索"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 缺失值处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练数据缺失情况：\n",
      " LotFrontage      259\n",
      "Alley           1369\n",
      "MasVnrType         8\n",
      "MasVnrArea         8\n",
      "BsmtQual          37\n",
      "BsmtCond          37\n",
      "BsmtExposure      38\n",
      "BsmtFinType1      37\n",
      "BsmtFinType2      38\n",
      "Electrical         1\n",
      "FireplaceQu      690\n",
      "GarageType        81\n",
      "GarageYrBlt       81\n",
      "GarageFinish      81\n",
      "GarageQual        81\n",
      "GarageCond        81\n",
      "PoolQC          1453\n",
      "Fence           1179\n",
      "MiscFeature     1406\n",
      "dtype: int64\n",
      "训练数据房屋价格y缺失值情况：\n",
      " 0\n",
      "测试数据缺失情况：\n",
      " MSZoning           4\n",
      "LotFrontage      227\n",
      "Alley           1352\n",
      "Utilities          2\n",
      "Exterior1st        1\n",
      "Exterior2nd        1\n",
      "MasVnrType        16\n",
      "MasVnrArea        15\n",
      "BsmtQual          44\n",
      "BsmtCond          45\n",
      "BsmtExposure      44\n",
      "BsmtFinType1      42\n",
      "BsmtFinSF1         1\n",
      "BsmtFinType2      42\n",
      "BsmtFinSF2         1\n",
      "BsmtUnfSF          1\n",
      "TotalBsmtSF        1\n",
      "BsmtFullBath       2\n",
      "BsmtHalfBath       2\n",
      "KitchenQual        1\n",
      "Functional         2\n",
      "FireplaceQu      730\n",
      "GarageType        76\n",
      "GarageYrBlt       78\n",
      "GarageFinish      78\n",
      "GarageCars         1\n",
      "GarageArea         1\n",
      "GarageQual        78\n",
      "GarageCond        78\n",
      "PoolQC          1456\n",
      "Fence           1169\n",
      "MiscFeature     1408\n",
      "SaleType           1\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "# 查看哪些特征具有空值，以及空值数量\n",
    "x_train_data_isnull = x_train.isnull().sum()\n",
    "y_train_data_isnull = y_train.isnull().sum()\n",
    "x_test_data_isnull = x_test.isnull().sum()\n",
    "\n",
    "# 特征名称列表\n",
    "columns = x_train.columns\n",
    "\n",
    "index = []\n",
    "for i in columns:\n",
    "    if x_train_data_isnull[i] == 0:\n",
    "        index.append(i)\n",
    "x_train_data_isnull.drop(index, inplace = True)\n",
    "columns_has_null_train = columns.drop(index)\n",
    "index = []\n",
    "for i in columns:\n",
    "    if x_test_data_isnull[i] == 0:\n",
    "        index.append(i)\n",
    "x_test_data_isnull.drop(index, inplace = True)\n",
    "columns_has_null_test = columns.drop(index)\n",
    "\n",
    "print(\"训练数据缺失情况：\\n\",x_train_data_isnull)\n",
    "print(\"训练数据房屋价格y缺失值情况：\\n\",y_train_data_isnull)\n",
    "print(\"测试数据缺失情况：\\n\",x_test_data_isnull)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "小结：   \n",
    "训练数据中房屋价格y无缺失值，故缺失值处理只考虑训练和测试数据x特征。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练数据中缺失比例超过15%的特征为： ['LotFrontage', 'Alley', 'FireplaceQu', 'PoolQC', 'Fence', 'MiscFeature']\n",
      "测试数据中缺失比例超过15%的特征为： ['LotFrontage', 'Alley', 'FireplaceQu', 'PoolQC', 'Fence', 'MiscFeature']\n"
     ]
    }
   ],
   "source": [
    "# 训练和测试集数据数量\n",
    "size_train_data = train_data.shape[0]\n",
    "size_test_data = test_data.shape[0]\n",
    "\n",
    "# 统计缺失比例超过15%的特征\n",
    "index_train_null_del = []\n",
    "index_test_null_del = []\n",
    "for i in columns_has_null_train:\n",
    "    if x_train_data_isnull[i] > size_train_data * 0.15:\n",
    "        index_train_null_del.append(i)\n",
    "for i in columns_has_null_test:\n",
    "    if x_test_data_isnull[i] > size_test_data * 0.15:\n",
    "        index_test_null_del.append(i)\n",
    "print(\"训练数据中缺失比例超过15%的特征为：\",index_train_null_del)\n",
    "print(\"测试数据中缺失比例超过15%的特征为：\",index_test_null_del)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "小结：   \n",
    "训练数据和测试数据中缺失比例超过15%的特征一致，为房屋到街道的直线距离（英尺）LotFrontage、所在巷通道的类型Alley、壁炉质量FireplaceQu、游泳池质量PoolQC、围栏质量Fence、没被包含在其他类别的杂项功能MiscFeature，将这6个特征剔除。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 删除缺失比例超过15%的特征：LotFrontage、Alley、FireplaceQu、PoolQC、Fence、MiscFeature\n",
    "x_train.drop(['LotFrontage', 'Alley', 'FireplaceQu', 'PoolQC', 'Fence', 'MiscFeature'], axis = 1, inplace = True)\n",
    "x_test.drop(['LotFrontage', 'Alley', 'FireplaceQu', 'PoolQC', 'Fence', 'MiscFeature'], axis = 1, inplace = True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "小结：   \n",
    "需要填补的特征有连续型也有离散型，根据属性不同的涵义，进行不同方式的填充。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 连续型特征缺失值补充\n",
    "\n",
    "# MasVnrArea 表层砌体面积（square feet），此属性未填写，很大可能性是房屋无表层砌体，因此缺失值用0填充\n",
    "x_train.loc[:, \"MasVnrArea\"] = x_train.loc[:, \"MasVnrArea\"].fillna(0)\n",
    "x_test.loc[:, \"MasVnrArea\"] = x_test.loc[:, \"MasVnrArea\"].fillna(0)\n",
    "\n",
    "# GarageYrBlt 车库建造年份，此属性为填写，很可能是房屋没有车库，因此缺失值用一个无效的年份0填充\n",
    "x_train.loc[:, \"GarageYrBlt\"] = x_train.loc[:, \"GarageYrBlt\"].fillna(0)\n",
    "x_test.loc[:, \"GarageYrBlt\"] = x_test.loc[:, \"GarageYrBlt\"].fillna(0)\n",
    "\n",
    "# BsmtFinSF1 第一类型（Type 1）完成面积面积（square feet），此属性为填写，很可能无第一类型（Type 1）完成面积，缺失值填0\n",
    "x_test.loc[:, \"BsmtFinSF1\"] = x_test.loc[:, \"BsmtFinSF1\"].fillna(0)\n",
    "x_test.loc[:, \"BsmtFinSF1\"] = x_test.loc[:, \"BsmtFinSF1\"].fillna(0)\n",
    "\n",
    "# BsmtFinSF2 Type 2 完成面积（square feet），此属性为填写，很可能是无第二类型（Type 1）完成面积，缺失值填0\n",
    "x_train.loc[:, \"BsmtFinSF2\"] = x_train.loc[:, \"BsmtFinSF2\"].fillna(0)\n",
    "x_test.loc[:, \"BsmtFinSF2\"] = x_test.loc[:, \"BsmtFinSF2\"].fillna(0)\n",
    "\n",
    "# BsmtUnfSF 未完成的地下室总面积（square feet），此属性为填写，很可能是无地下室或地下室均已完成，缺失值填0\n",
    "x_train.loc[:, \"BsmtUnfSF\"] = x_train.loc[:, \"BsmtUnfSF\"].fillna(0)\n",
    "x_test.loc[:, \"BsmtUnfSF\"] = x_test.loc[:, \"BsmtUnfSF\"].fillna(0)\n",
    "\n",
    "# GarageCars 车库大小（能停的车辆数目） ，此属性为填写，很可能是房屋没有车库，，因此缺失值用0填充\n",
    "x_train.loc[:, \"GarageCars\"] = x_train.loc[:, \"GarageCars\"].fillna(0)\n",
    "x_test.loc[:, \"GarageCars\"] = x_test.loc[:, \"GarageCars\"].fillna(0)\n",
    "\n",
    "# GarageArea 车库大小（square feet） ，此属性为填写，很可能是房屋没有车库，，因此缺失值用0填充\n",
    "x_train.loc[:, \"GarageArea\"] = x_train.loc[:, \"GarageArea\"].fillna(0)\n",
    "x_test.loc[:, \"GarageArea\"] = x_test.loc[:, \"GarageArea\"].fillna(0)\n",
    "\n",
    "# TotalBsmtSF 地下室总面积（square feet），此属性未填写，很大可能性是无地下室，因此缺失值用0填充\n",
    "x_train.loc[:, \"TotalBsmtSF\"] = x_train.loc[:, \"TotalBsmtSF\"].fillna(0)\n",
    "x_test.loc[:, \"TotalBsmtSF\"] = x_test.loc[:, \"TotalBsmtSF\"].fillna(0)\n",
    "\n",
    "# BsmtFullBath 地下室全浴室数目，此属性未填写，很大可能性是无地下室，因此缺失值用0填充\n",
    "x_train.loc[:, \"BsmtFullBath\"] = x_train.loc[:, \"BsmtFullBath\"].fillna(0)\n",
    "x_test.loc[:, \"BsmtFullBath\"] = x_test.loc[:, \"BsmtFullBath\"].fillna(0)\n",
    "\n",
    "# BsmtHalfBath 地下室半浴室数目，此属性未填写，很大可能性是无地下室，因此缺失值用0填充\n",
    "x_train.loc[:, \"BsmtHalfBath\"] = x_train.loc[:, \"BsmtHalfBath\"].fillna(0)\n",
    "x_test.loc[:, \"BsmtHalfBath\"] = x_test.loc[:, \"BsmtHalfBath\"].fillna(0)\n",
    "\n",
    "\n",
    "# 离散型缺失值填充\n",
    "\n",
    "# MasVnrType 表层砌体（Masonry veneer）类型，此属性未填写，很大可能性是房屋无表层砌体，因此缺失值用No填充\n",
    "x_train.loc[:, \"MasVnrType\"] = x_train.loc[:, \"MasVnrType\"].fillna(\"No\")\n",
    "x_test.loc[:, \"MasVnrType\"] = x_test.loc[:, \"MasVnrType\"].fillna(\"No\")\n",
    "\n",
    "# MSZoning 地区分类，此属性未填写，地区未知，缺失值用Unknown填充\n",
    "x_train.loc[:, \"MSZoning\"] = x_train.loc[:, \"MSZoning\"].fillna(\"Unknown\")\n",
    "x_test.loc[:, \"MSZoning\"] = x_test.loc[:, \"MSZoning\"].fillna(\"Unknown\")\n",
    "\n",
    "# BsmtQual 地下室高度，此属性未填写，很大可能性是无地下室，因此缺失值用No填充\n",
    "x_train.loc[:, \"BsmtQual\"] = x_train.loc[:, \"BsmtQual\"].fillna(\"No\")\n",
    "x_test.loc[:, \"BsmtQual\"] = x_test.loc[:, \"BsmtQual\"].fillna(\"No\")\n",
    "\n",
    "# BsmtCond 地下室的总体状况，此属性未填写，很大可能性是无地下室，因此缺失值用No填充\n",
    "x_train.loc[:, \"BsmtCond\"] = x_train.loc[:, \"BsmtCond\"].fillna(\"No\")\n",
    "x_test.loc[:, \"BsmtCond\"] = x_test.loc[:, \"BsmtCond\"].fillna(\"No\")\n",
    "\n",
    "# BsmtExposure Walkout或花园层地下室的墙壁，此属性未填写，很大可能性是无地下室，因此缺失值用No填充\n",
    "x_train.loc[:, \"BsmtExposure\"] = x_train.loc[:, \"BsmtExposure\"].fillna(\"No\")\n",
    "x_test.loc[:, \"BsmtExposure\"] = x_test.loc[:, \"BsmtExposure\"].fillna(\"No\")\n",
    "\n",
    "# BsmtFinType1 完成的地下室的质量，此属性未填写，很大可能性是无地下室，因此缺失值用No填充\n",
    "x_train.loc[:, \"BsmtFinType1\"] = x_train.loc[:, \"BsmtFinType1\"].fillna(\"No\")\n",
    "x_test.loc[:, \"BsmtFinType1\"] = x_test.loc[:, \"BsmtFinType1\"].fillna(\"No\")\n",
    "\n",
    "# BsmtFinType2 第二类型完成面积(如果有)，此属性未填写，很大可能性是无地下室，因此缺失值用No填充\n",
    "x_train.loc[:, \"BsmtFinType2\"] = x_train.loc[:, \"BsmtFinType2\"].fillna(\"No\")\n",
    "x_test.loc[:, \"BsmtFinType2\"] = x_test.loc[:, \"BsmtFinType2\"].fillna(\"No\")\n",
    "\n",
    "# Electrical 电气系统，此属性未填写，很大可能性是用户忘记填写，因此缺失值用出现最多的情况填写\n",
    "x_train.loc[:, \"Electrical\"] = x_train.loc[:, \"Electrical\"].fillna(\"SBrkr\")\n",
    "x_test.loc[:, \"Electrical\"] = x_test.loc[:, \"Electrical\"].fillna(\"SBrkr\")\n",
    "\n",
    "# GarageType 车库位置，此属性未填写，很大可能性是没有车库，因此缺失值用No填写\n",
    "x_train.loc[:, \"GarageType\"] = x_train.loc[:, \"GarageType\"].fillna(\"No\")\n",
    "x_test.loc[:, \"GarageType\"] = x_test.loc[:, \"GarageType\"].fillna(\"No\")\n",
    "\n",
    "# GarageFinish I车库内部装修，此属性未填写，很大可能性是没有车库，因此缺失值用No填写\n",
    "x_train.loc[:, \"GarageFinish\"] = x_train.loc[:, \"GarageFinish\"].fillna(\"No\")\n",
    "x_test.loc[:, \"GarageFinish\"] = x_test.loc[:, \"GarageFinish\"].fillna(\"No\")\n",
    "\n",
    "# GarageQual车库质量，此属性未填写，很大可能性是没有车库，因此缺失值用No填写\n",
    "x_train.loc[:, \"GarageQual\"] = x_train.loc[:, \"GarageQual\"].fillna(\"No\")\n",
    "x_test.loc[:, \"GarageQual\"] = x_test.loc[:, \"GarageQual\"].fillna(\"No\")\n",
    "\n",
    "# GarageCond 车库条件，此属性未填写，很大可能性是没有车库，因此缺失值用No填写\n",
    "x_train.loc[:, \"GarageCond\"] = x_train.loc[:, \"GarageCond\"].fillna(\"No\")\n",
    "x_test.loc[:, \"GarageCond\"] = x_test.loc[:, \"GarageCond\"].fillna(\"No\")\n",
    "\n",
    "# Utilities 可用的工具 ，此属性未填写，很大可能性是用户忘记填写，因此缺失值用出现最多的情况填写\n",
    "x_train.loc[:, \"Utilities\"] = x_train.loc[:, \"Utilities\"].fillna(\"AllPub\")\n",
    "x_test.loc[:, \"Utilities\"] = x_test.loc[:, \"Utilities\"].fillna(\"AllPub\")\n",
    "\n",
    "# Exterior1st 房屋外墙，此属性未填写，很大可能性是用户忘记填写，因此缺失值用出现最多的情况填写\n",
    "x_train.loc[:, \"Exterior1st\"] = x_train.loc[:, \"Exterior1st\"].fillna(\"VinylSd\")\n",
    "x_test.loc[:, \"Exterior1st\"] = x_test.loc[:, \"Exterior1st\"].fillna(\"VinylSd\")\n",
    "\n",
    "# Exterior2nd 房屋外墙 (如果多于一种材料)，此属性未填写，很大可能性是用户忘记填写，因此缺失值用出现最多的情况填写\n",
    "x_train.loc[:, \"Exterior2nd\"] = x_train.loc[:, \"Exterior2nd\"].fillna(\"VinylSd\")\n",
    "x_test.loc[:, \"Exterior2nd\"] = x_test.loc[:, \"Exterior2nd\"].fillna(\"VinylSd\")\n",
    "\n",
    "\n",
    "# KitchenQual 厨房质量，此属性未填写，很大可能性是用户忘记填写，因此缺失值用出现最多的情况填写\n",
    "x_train.loc[:, \"KitchenQual\"] = x_train.loc[:, \"KitchenQual\"].fillna(\"TA\")\n",
    "x_test.loc[:, \"KitchenQual\"] = x_test.loc[:, \"KitchenQual\"].fillna(\"TA\")\n",
    "\n",
    "# Functional 家庭功能评级，此属性未填写，很大可能性是用户忘记填写，因此缺失值用出现最多的情况填写\n",
    "x_train.loc[:, \"Functional\"] = x_train.loc[:, \"Functional\"].fillna(\"Typ\")\n",
    "x_test.loc[:, \"Functional\"] = x_test.loc[:, \"Functional\"].fillna(\"Typ\")\n",
    "\n",
    "# SaleType 销售类型，此属性未填写，很大可能性是用户忘记填写，因此缺失值用出现最多的情况填写\n",
    "x_train.loc[:, \"SaleType\"] = x_train.loc[:, \"SaleType\"].fillna(\"WD\")\n",
    "x_test.loc[:, \"SaleType\"] = x_test.loc[:, \"SaleType\"].fillna(\"WD\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1460 entries, 0 to 1459\n",
      "Data columns (total 73 columns):\n",
      "MSSubClass       1460 non-null int64\n",
      "MSZoning         1460 non-null object\n",
      "LotArea          1460 non-null int64\n",
      "Street           1460 non-null object\n",
      "LotShape         1460 non-null object\n",
      "LandContour      1460 non-null object\n",
      "Utilities        1460 non-null object\n",
      "LotConfig        1460 non-null object\n",
      "LandSlope        1460 non-null object\n",
      "Neighborhood     1460 non-null object\n",
      "Condition1       1460 non-null object\n",
      "Condition2       1460 non-null object\n",
      "BldgType         1460 non-null object\n",
      "HouseStyle       1460 non-null object\n",
      "OverallQual      1460 non-null int64\n",
      "OverallCond      1460 non-null int64\n",
      "YearBuilt        1460 non-null int64\n",
      "YearRemodAdd     1460 non-null int64\n",
      "RoofStyle        1460 non-null object\n",
      "RoofMatl         1460 non-null object\n",
      "Exterior1st      1460 non-null object\n",
      "Exterior2nd      1460 non-null object\n",
      "MasVnrType       1460 non-null object\n",
      "MasVnrArea       1460 non-null float64\n",
      "ExterQual        1460 non-null object\n",
      "ExterCond        1460 non-null object\n",
      "Foundation       1460 non-null object\n",
      "BsmtQual         1460 non-null object\n",
      "BsmtCond         1460 non-null object\n",
      "BsmtExposure     1460 non-null object\n",
      "BsmtFinType1     1460 non-null object\n",
      "BsmtFinSF1       1460 non-null int64\n",
      "BsmtFinType2     1460 non-null object\n",
      "BsmtFinSF2       1460 non-null int64\n",
      "BsmtUnfSF        1460 non-null int64\n",
      "TotalBsmtSF      1460 non-null int64\n",
      "Heating          1460 non-null object\n",
      "HeatingQC        1460 non-null object\n",
      "CentralAir       1460 non-null object\n",
      "Electrical       1460 non-null object\n",
      "1stFlrSF         1460 non-null int64\n",
      "2ndFlrSF         1460 non-null int64\n",
      "LowQualFinSF     1460 non-null int64\n",
      "GrLivArea        1460 non-null int64\n",
      "BsmtFullBath     1460 non-null int64\n",
      "BsmtHalfBath     1460 non-null int64\n",
      "FullBath         1460 non-null int64\n",
      "HalfBath         1460 non-null int64\n",
      "BedroomAbvGr     1460 non-null int64\n",
      "KitchenAbvGr     1460 non-null int64\n",
      "KitchenQual      1460 non-null object\n",
      "TotRmsAbvGrd     1460 non-null int64\n",
      "Functional       1460 non-null object\n",
      "Fireplaces       1460 non-null int64\n",
      "GarageType       1460 non-null object\n",
      "GarageYrBlt      1460 non-null float64\n",
      "GarageFinish     1460 non-null object\n",
      "GarageCars       1460 non-null int64\n",
      "GarageArea       1460 non-null int64\n",
      "GarageQual       1460 non-null object\n",
      "GarageCond       1460 non-null object\n",
      "PavedDrive       1460 non-null object\n",
      "WoodDeckSF       1460 non-null int64\n",
      "OpenPorchSF      1460 non-null int64\n",
      "EnclosedPorch    1460 non-null int64\n",
      "3SsnPorch        1460 non-null int64\n",
      "ScreenPorch      1460 non-null int64\n",
      "PoolArea         1460 non-null int64\n",
      "MiscVal          1460 non-null int64\n",
      "MoSold           1460 non-null int64\n",
      "YrSold           1460 non-null int64\n",
      "SaleType         1460 non-null object\n",
      "SaleCondition    1460 non-null object\n",
      "dtypes: float64(2), int64(33), object(38)\n",
      "memory usage: 832.7+ KB\n"
     ]
    }
   ],
   "source": [
    "x_train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1459 entries, 0 to 1458\n",
      "Data columns (total 73 columns):\n",
      "MSSubClass       1459 non-null int64\n",
      "MSZoning         1459 non-null object\n",
      "LotArea          1459 non-null int64\n",
      "Street           1459 non-null object\n",
      "LotShape         1459 non-null object\n",
      "LandContour      1459 non-null object\n",
      "Utilities        1459 non-null object\n",
      "LotConfig        1459 non-null object\n",
      "LandSlope        1459 non-null object\n",
      "Neighborhood     1459 non-null object\n",
      "Condition1       1459 non-null object\n",
      "Condition2       1459 non-null object\n",
      "BldgType         1459 non-null object\n",
      "HouseStyle       1459 non-null object\n",
      "OverallQual      1459 non-null int64\n",
      "OverallCond      1459 non-null int64\n",
      "YearBuilt        1459 non-null int64\n",
      "YearRemodAdd     1459 non-null int64\n",
      "RoofStyle        1459 non-null object\n",
      "RoofMatl         1459 non-null object\n",
      "Exterior1st      1459 non-null object\n",
      "Exterior2nd      1459 non-null object\n",
      "MasVnrType       1459 non-null object\n",
      "MasVnrArea       1459 non-null float64\n",
      "ExterQual        1459 non-null object\n",
      "ExterCond        1459 non-null object\n",
      "Foundation       1459 non-null object\n",
      "BsmtQual         1459 non-null object\n",
      "BsmtCond         1459 non-null object\n",
      "BsmtExposure     1459 non-null object\n",
      "BsmtFinType1     1459 non-null object\n",
      "BsmtFinSF1       1459 non-null float64\n",
      "BsmtFinType2     1459 non-null object\n",
      "BsmtFinSF2       1459 non-null float64\n",
      "BsmtUnfSF        1459 non-null float64\n",
      "TotalBsmtSF      1459 non-null float64\n",
      "Heating          1459 non-null object\n",
      "HeatingQC        1459 non-null object\n",
      "CentralAir       1459 non-null object\n",
      "Electrical       1459 non-null object\n",
      "1stFlrSF         1459 non-null int64\n",
      "2ndFlrSF         1459 non-null int64\n",
      "LowQualFinSF     1459 non-null int64\n",
      "GrLivArea        1459 non-null int64\n",
      "BsmtFullBath     1459 non-null float64\n",
      "BsmtHalfBath     1459 non-null float64\n",
      "FullBath         1459 non-null int64\n",
      "HalfBath         1459 non-null int64\n",
      "BedroomAbvGr     1459 non-null int64\n",
      "KitchenAbvGr     1459 non-null int64\n",
      "KitchenQual      1459 non-null object\n",
      "TotRmsAbvGrd     1459 non-null int64\n",
      "Functional       1459 non-null object\n",
      "Fireplaces       1459 non-null int64\n",
      "GarageType       1459 non-null object\n",
      "GarageYrBlt      1459 non-null float64\n",
      "GarageFinish     1459 non-null object\n",
      "GarageCars       1459 non-null float64\n",
      "GarageArea       1459 non-null float64\n",
      "GarageQual       1459 non-null object\n",
      "GarageCond       1459 non-null object\n",
      "PavedDrive       1459 non-null object\n",
      "WoodDeckSF       1459 non-null int64\n",
      "OpenPorchSF      1459 non-null int64\n",
      "EnclosedPorch    1459 non-null int64\n",
      "3SsnPorch        1459 non-null int64\n",
      "ScreenPorch      1459 non-null int64\n",
      "PoolArea         1459 non-null int64\n",
      "MiscVal          1459 non-null int64\n",
      "MoSold           1459 non-null int64\n",
      "YrSold           1459 non-null int64\n",
      "SaleType         1459 non-null object\n",
      "SaleCondition    1459 non-null object\n",
      "dtypes: float64(10), int64(25), object(38)\n",
      "memory usage: 832.2+ KB\n"
     ]
    }
   ],
   "source": [
    "x_test.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 离散特征独热编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data = x_train\n",
    "train_data['SalePrice'] = y_train\n",
    "test_data = x_test\n",
    "\n",
    "one_hot_features=['MSZoning', 'Street', 'LotShape', 'LandContour', 'LotConfig', 'LandSlope', 'Neighborhood', \n",
    "                  'Condition1', 'Condition2', 'BldgType',  'HouseStyle', 'RoofStyle', 'RoofMatl', 'Exterior1st', \n",
    "                  'Exterior2nd', 'MasVnrType', 'ExterQual', 'ExterCond', 'Foundation', 'BsmtQual',  'BsmtCond', \n",
    "                  'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2', 'Heating', 'HeatingQC', 'CentralAir', 'Electrical', \n",
    "                  'KitchenQual', 'Functional', 'GarageType', 'GarageFinish', 'GarageQual', 'GarageCond',  'PavedDrive', \n",
    "                  'SaleType', 'SaleCondition', 'Utilities']  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>MSZoning</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>Street</th>\n",
       "      <th>LotShape</th>\n",
       "      <th>LandContour</th>\n",
       "      <th>Utilities</th>\n",
       "      <th>LotConfig</th>\n",
       "      <th>LandSlope</th>\n",
       "      <th>Neighborhood</th>\n",
       "      <th>...</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>3SsnPorch</th>\n",
       "      <th>ScreenPorch</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>SaleType</th>\n",
       "      <th>SaleCondition</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>8450</td>\n",
       "      <td>Pave</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>Inside</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>CollgCr</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>208500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>20</td>\n",
       "      <td>RL</td>\n",
       "      <td>9600</td>\n",
       "      <td>Pave</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>FR2</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>Veenker</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>2007</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>181500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>11250</td>\n",
       "      <td>Pave</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>Inside</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>CollgCr</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>223500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>70</td>\n",
       "      <td>RL</td>\n",
       "      <td>9550</td>\n",
       "      <td>Pave</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>Corner</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>Crawfor</td>\n",
       "      <td>...</td>\n",
       "      <td>272</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2006</td>\n",
       "      <td>WD</td>\n",
       "      <td>Abnorml</td>\n",
       "      <td>140000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>14260</td>\n",
       "      <td>Pave</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>FR2</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>NoRidge</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>250000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 74 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   MSSubClass MSZoning  LotArea Street LotShape LandContour Utilities  \\\n",
       "0          60       RL     8450   Pave      Reg         Lvl    AllPub   \n",
       "1          20       RL     9600   Pave      Reg         Lvl    AllPub   \n",
       "2          60       RL    11250   Pave      IR1         Lvl    AllPub   \n",
       "3          70       RL     9550   Pave      IR1         Lvl    AllPub   \n",
       "4          60       RL    14260   Pave      IR1         Lvl    AllPub   \n",
       "\n",
       "  LotConfig LandSlope Neighborhood    ...    EnclosedPorch 3SsnPorch  \\\n",
       "0    Inside       Gtl      CollgCr    ...                0         0   \n",
       "1       FR2       Gtl      Veenker    ...                0         0   \n",
       "2    Inside       Gtl      CollgCr    ...                0         0   \n",
       "3    Corner       Gtl      Crawfor    ...              272         0   \n",
       "4       FR2       Gtl      NoRidge    ...                0         0   \n",
       "\n",
       "  ScreenPorch PoolArea  MiscVal  MoSold  YrSold  SaleType SaleCondition  \\\n",
       "0           0        0        0       2    2008        WD        Normal   \n",
       "1           0        0        0       5    2007        WD        Normal   \n",
       "2           0        0        0       9    2008        WD        Normal   \n",
       "3           0        0        0       2    2006        WD       Abnorml   \n",
       "4           0        0        0      12    2008        WD        Normal   \n",
       "\n",
       "  SalePrice  \n",
       "0    208500  \n",
       "1    181500  \n",
       "2    223500  \n",
       "3    140000  \n",
       "4    250000  \n",
       "\n",
       "[5 rows x 74 columns]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSZoning</th>\n",
       "      <th>Street</th>\n",
       "      <th>LotShape</th>\n",
       "      <th>LandContour</th>\n",
       "      <th>LotConfig</th>\n",
       "      <th>LandSlope</th>\n",
       "      <th>Neighborhood</th>\n",
       "      <th>Condition1</th>\n",
       "      <th>Condition2</th>\n",
       "      <th>BldgType</th>\n",
       "      <th>...</th>\n",
       "      <th>KitchenQual</th>\n",
       "      <th>Functional</th>\n",
       "      <th>GarageType</th>\n",
       "      <th>GarageFinish</th>\n",
       "      <th>GarageQual</th>\n",
       "      <th>GarageCond</th>\n",
       "      <th>PavedDrive</th>\n",
       "      <th>SaleType</th>\n",
       "      <th>SaleCondition</th>\n",
       "      <th>Utilities</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>RL</td>\n",
       "      <td>Pave</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>Inside</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>CollgCr</td>\n",
       "      <td>Norm</td>\n",
       "      <td>Norm</td>\n",
       "      <td>1Fam</td>\n",
       "      <td>...</td>\n",
       "      <td>Gd</td>\n",
       "      <td>Typ</td>\n",
       "      <td>Attchd</td>\n",
       "      <td>RFn</td>\n",
       "      <td>TA</td>\n",
       "      <td>TA</td>\n",
       "      <td>Y</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>AllPub</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>RL</td>\n",
       "      <td>Pave</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>FR2</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>Veenker</td>\n",
       "      <td>Feedr</td>\n",
       "      <td>Norm</td>\n",
       "      <td>1Fam</td>\n",
       "      <td>...</td>\n",
       "      <td>TA</td>\n",
       "      <td>Typ</td>\n",
       "      <td>Attchd</td>\n",
       "      <td>RFn</td>\n",
       "      <td>TA</td>\n",
       "      <td>TA</td>\n",
       "      <td>Y</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>AllPub</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>RL</td>\n",
       "      <td>Pave</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>Inside</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>CollgCr</td>\n",
       "      <td>Norm</td>\n",
       "      <td>Norm</td>\n",
       "      <td>1Fam</td>\n",
       "      <td>...</td>\n",
       "      <td>Gd</td>\n",
       "      <td>Typ</td>\n",
       "      <td>Attchd</td>\n",
       "      <td>RFn</td>\n",
       "      <td>TA</td>\n",
       "      <td>TA</td>\n",
       "      <td>Y</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>AllPub</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>RL</td>\n",
       "      <td>Pave</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>Corner</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>Crawfor</td>\n",
       "      <td>Norm</td>\n",
       "      <td>Norm</td>\n",
       "      <td>1Fam</td>\n",
       "      <td>...</td>\n",
       "      <td>Gd</td>\n",
       "      <td>Typ</td>\n",
       "      <td>Detchd</td>\n",
       "      <td>Unf</td>\n",
       "      <td>TA</td>\n",
       "      <td>TA</td>\n",
       "      <td>Y</td>\n",
       "      <td>WD</td>\n",
       "      <td>Abnorml</td>\n",
       "      <td>AllPub</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>RL</td>\n",
       "      <td>Pave</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>FR2</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>NoRidge</td>\n",
       "      <td>Norm</td>\n",
       "      <td>Norm</td>\n",
       "      <td>1Fam</td>\n",
       "      <td>...</td>\n",
       "      <td>Gd</td>\n",
       "      <td>Typ</td>\n",
       "      <td>Attchd</td>\n",
       "      <td>RFn</td>\n",
       "      <td>TA</td>\n",
       "      <td>TA</td>\n",
       "      <td>Y</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>AllPub</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 38 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  MSZoning Street LotShape LandContour LotConfig LandSlope Neighborhood  \\\n",
       "0       RL   Pave      Reg         Lvl    Inside       Gtl      CollgCr   \n",
       "1       RL   Pave      Reg         Lvl       FR2       Gtl      Veenker   \n",
       "2       RL   Pave      IR1         Lvl    Inside       Gtl      CollgCr   \n",
       "3       RL   Pave      IR1         Lvl    Corner       Gtl      Crawfor   \n",
       "4       RL   Pave      IR1         Lvl       FR2       Gtl      NoRidge   \n",
       "\n",
       "  Condition1 Condition2 BldgType    ...    KitchenQual Functional GarageType  \\\n",
       "0       Norm       Norm     1Fam    ...             Gd        Typ     Attchd   \n",
       "1      Feedr       Norm     1Fam    ...             TA        Typ     Attchd   \n",
       "2       Norm       Norm     1Fam    ...             Gd        Typ     Attchd   \n",
       "3       Norm       Norm     1Fam    ...             Gd        Typ     Detchd   \n",
       "4       Norm       Norm     1Fam    ...             Gd        Typ     Attchd   \n",
       "\n",
       "  GarageFinish GarageQual GarageCond PavedDrive SaleType SaleCondition  \\\n",
       "0          RFn         TA         TA          Y       WD        Normal   \n",
       "1          RFn         TA         TA          Y       WD        Normal   \n",
       "2          RFn         TA         TA          Y       WD        Normal   \n",
       "3          Unf         TA         TA          Y       WD       Abnorml   \n",
       "4          RFn         TA         TA          Y       WD        Normal   \n",
       "\n",
       "  Utilities  \n",
       "0    AllPub  \n",
       "1    AllPub  \n",
       "2    AllPub  \n",
       "3    AllPub  \n",
       "4    AllPub  \n",
       "\n",
       "[5 rows x 38 columns]"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# OneHotEncoder编码  \n",
    "x_train_cat = train_data[one_hot_features]\n",
    "x_test_cat = test_data[one_hot_features]\n",
    "\n",
    "x_train_cat.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSZoning</th>\n",
       "      <th>Street</th>\n",
       "      <th>LotShape</th>\n",
       "      <th>LandContour</th>\n",
       "      <th>LotConfig</th>\n",
       "      <th>LandSlope</th>\n",
       "      <th>Neighborhood</th>\n",
       "      <th>Condition1</th>\n",
       "      <th>Condition2</th>\n",
       "      <th>BldgType</th>\n",
       "      <th>...</th>\n",
       "      <th>KitchenQual</th>\n",
       "      <th>Functional</th>\n",
       "      <th>GarageType</th>\n",
       "      <th>GarageFinish</th>\n",
       "      <th>GarageQual</th>\n",
       "      <th>GarageCond</th>\n",
       "      <th>PavedDrive</th>\n",
       "      <th>SaleType</th>\n",
       "      <th>SaleCondition</th>\n",
       "      <th>Utilities</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>RH</td>\n",
       "      <td>Pave</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>Inside</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>NAmes</td>\n",
       "      <td>Feedr</td>\n",
       "      <td>Norm</td>\n",
       "      <td>1Fam</td>\n",
       "      <td>...</td>\n",
       "      <td>TA</td>\n",
       "      <td>Typ</td>\n",
       "      <td>Attchd</td>\n",
       "      <td>Unf</td>\n",
       "      <td>TA</td>\n",
       "      <td>TA</td>\n",
       "      <td>Y</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>AllPub</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>RL</td>\n",
       "      <td>Pave</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>Corner</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>NAmes</td>\n",
       "      <td>Norm</td>\n",
       "      <td>Norm</td>\n",
       "      <td>1Fam</td>\n",
       "      <td>...</td>\n",
       "      <td>Gd</td>\n",
       "      <td>Typ</td>\n",
       "      <td>Attchd</td>\n",
       "      <td>Unf</td>\n",
       "      <td>TA</td>\n",
       "      <td>TA</td>\n",
       "      <td>Y</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>AllPub</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>RL</td>\n",
       "      <td>Pave</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>Inside</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>Gilbert</td>\n",
       "      <td>Norm</td>\n",
       "      <td>Norm</td>\n",
       "      <td>1Fam</td>\n",
       "      <td>...</td>\n",
       "      <td>TA</td>\n",
       "      <td>Typ</td>\n",
       "      <td>Attchd</td>\n",
       "      <td>Fin</td>\n",
       "      <td>TA</td>\n",
       "      <td>TA</td>\n",
       "      <td>Y</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>AllPub</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>RL</td>\n",
       "      <td>Pave</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>Inside</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>Gilbert</td>\n",
       "      <td>Norm</td>\n",
       "      <td>Norm</td>\n",
       "      <td>1Fam</td>\n",
       "      <td>...</td>\n",
       "      <td>Gd</td>\n",
       "      <td>Typ</td>\n",
       "      <td>Attchd</td>\n",
       "      <td>Fin</td>\n",
       "      <td>TA</td>\n",
       "      <td>TA</td>\n",
       "      <td>Y</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>AllPub</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>RL</td>\n",
       "      <td>Pave</td>\n",
       "      <td>IR1</td>\n",
       "      <td>HLS</td>\n",
       "      <td>Inside</td>\n",
       "      <td>Gtl</td>\n",
       "      <td>StoneBr</td>\n",
       "      <td>Norm</td>\n",
       "      <td>Norm</td>\n",
       "      <td>TwnhsE</td>\n",
       "      <td>...</td>\n",
       "      <td>Gd</td>\n",
       "      <td>Typ</td>\n",
       "      <td>Attchd</td>\n",
       "      <td>RFn</td>\n",
       "      <td>TA</td>\n",
       "      <td>TA</td>\n",
       "      <td>Y</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>AllPub</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 38 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "  MSZoning Street LotShape LandContour LotConfig LandSlope Neighborhood  \\\n",
       "0       RH   Pave      Reg         Lvl    Inside       Gtl        NAmes   \n",
       "1       RL   Pave      IR1         Lvl    Corner       Gtl        NAmes   \n",
       "2       RL   Pave      IR1         Lvl    Inside       Gtl      Gilbert   \n",
       "3       RL   Pave      IR1         Lvl    Inside       Gtl      Gilbert   \n",
       "4       RL   Pave      IR1         HLS    Inside       Gtl      StoneBr   \n",
       "\n",
       "  Condition1 Condition2 BldgType    ...    KitchenQual Functional GarageType  \\\n",
       "0      Feedr       Norm     1Fam    ...             TA        Typ     Attchd   \n",
       "1       Norm       Norm     1Fam    ...             Gd        Typ     Attchd   \n",
       "2       Norm       Norm     1Fam    ...             TA        Typ     Attchd   \n",
       "3       Norm       Norm     1Fam    ...             Gd        Typ     Attchd   \n",
       "4       Norm       Norm   TwnhsE    ...             Gd        Typ     Attchd   \n",
       "\n",
       "  GarageFinish GarageQual GarageCond PavedDrive SaleType SaleCondition  \\\n",
       "0          Unf         TA         TA          Y       WD        Normal   \n",
       "1          Unf         TA         TA          Y       WD        Normal   \n",
       "2          Fin         TA         TA          Y       WD        Normal   \n",
       "3          Fin         TA         TA          Y       WD        Normal   \n",
       "4          RFn         TA         TA          Y       WD        Normal   \n",
       "\n",
       "  Utilities  \n",
       "0    AllPub  \n",
       "1    AllPub  \n",
       "2    AllPub  \n",
       "3    AllPub  \n",
       "4    AllPub  \n",
       "\n",
       "[5 rows x 38 columns]"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_test_cat.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSZoning_C (all)</th>\n",
       "      <th>MSZoning_FV</th>\n",
       "      <th>MSZoning_RH</th>\n",
       "      <th>MSZoning_RL</th>\n",
       "      <th>MSZoning_RM</th>\n",
       "      <th>Street_Grvl</th>\n",
       "      <th>Street_Pave</th>\n",
       "      <th>LotShape_IR1</th>\n",
       "      <th>LotShape_IR2</th>\n",
       "      <th>LotShape_IR3</th>\n",
       "      <th>...</th>\n",
       "      <th>SaleType_Oth</th>\n",
       "      <th>SaleType_WD</th>\n",
       "      <th>SaleCondition_Abnorml</th>\n",
       "      <th>SaleCondition_AdjLand</th>\n",
       "      <th>SaleCondition_Alloca</th>\n",
       "      <th>SaleCondition_Family</th>\n",
       "      <th>SaleCondition_Normal</th>\n",
       "      <th>SaleCondition_Partial</th>\n",
       "      <th>Utilities_AllPub</th>\n",
       "      <th>Utilities_NoSeWa</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 243 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   MSZoning_C (all)  MSZoning_FV  MSZoning_RH  MSZoning_RL  MSZoning_RM  \\\n",
       "0                 0            0            0            1            0   \n",
       "1                 0            0            0            1            0   \n",
       "2                 0            0            0            1            0   \n",
       "3                 0            0            0            1            0   \n",
       "4                 0            0            0            1            0   \n",
       "\n",
       "   Street_Grvl  Street_Pave  LotShape_IR1  LotShape_IR2  LotShape_IR3  \\\n",
       "0            0            1             0             0             0   \n",
       "1            0            1             0             0             0   \n",
       "2            0            1             1             0             0   \n",
       "3            0            1             1             0             0   \n",
       "4            0            1             1             0             0   \n",
       "\n",
       "         ...         SaleType_Oth  SaleType_WD  SaleCondition_Abnorml  \\\n",
       "0        ...                    0            1                      0   \n",
       "1        ...                    0            1                      0   \n",
       "2        ...                    0            1                      0   \n",
       "3        ...                    0            1                      1   \n",
       "4        ...                    0            1                      0   \n",
       "\n",
       "   SaleCondition_AdjLand  SaleCondition_Alloca  SaleCondition_Family  \\\n",
       "0                      0                     0                     0   \n",
       "1                      0                     0                     0   \n",
       "2                      0                     0                     0   \n",
       "3                      0                     0                     0   \n",
       "4                      0                     0                     0   \n",
       "\n",
       "   SaleCondition_Normal  SaleCondition_Partial  Utilities_AllPub  \\\n",
       "0                     1                      0                 1   \n",
       "1                     1                      0                 1   \n",
       "2                     1                      0                 1   \n",
       "3                     0                      0                 1   \n",
       "4                     1                      0                 1   \n",
       "\n",
       "   Utilities_NoSeWa  \n",
       "0                 0  \n",
       "1                 0  \n",
       "2                 0  \n",
       "3                 0  \n",
       "4                 0  \n",
       "\n",
       "[5 rows x 243 columns]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train_cat = pd.get_dummies(x_train_cat)\n",
    "# x_test_cat = pd.get_dummies(x_test_cat)\n",
    "\n",
    "x_train_cat.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# x_test_cat.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据部分标准化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>OverallQual</th>\n",
       "      <th>OverallCond</th>\n",
       "      <th>YearBuilt</th>\n",
       "      <th>YearRemodAdd</th>\n",
       "      <th>MasVnrArea</th>\n",
       "      <th>BsmtFinSF1</th>\n",
       "      <th>BsmtFinSF2</th>\n",
       "      <th>BsmtUnfSF</th>\n",
       "      <th>...</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <th>OpenPorchSF</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>3SsnPorch</th>\n",
       "      <th>ScreenPorch</th>\n",
       "      <th>PoolArea</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.235294</td>\n",
       "      <td>0.033420</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.500</td>\n",
       "      <td>0.949275</td>\n",
       "      <td>0.883333</td>\n",
       "      <td>0.12250</td>\n",
       "      <td>0.125089</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.064212</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.111517</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.038795</td>\n",
       "      <td>0.555556</td>\n",
       "      <td>0.875</td>\n",
       "      <td>0.753623</td>\n",
       "      <td>0.433333</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.173281</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.121575</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.363636</td>\n",
       "      <td>0.25</td>\n",
       "      <td>0.347725</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.235294</td>\n",
       "      <td>0.046507</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.500</td>\n",
       "      <td>0.934783</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>0.10125</td>\n",
       "      <td>0.086109</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.185788</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.076782</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.294118</td>\n",
       "      <td>0.038561</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.500</td>\n",
       "      <td>0.311594</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.038271</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.231164</td>\n",
       "      <td>...</td>\n",
       "      <td>0.492754</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.063985</td>\n",
       "      <td>0.492754</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.235294</td>\n",
       "      <td>0.060576</td>\n",
       "      <td>0.777778</td>\n",
       "      <td>0.500</td>\n",
       "      <td>0.927536</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.21875</td>\n",
       "      <td>0.116052</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.209760</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.224037</td>\n",
       "      <td>0.153565</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 37 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   MSSubClass   LotArea  OverallQual  OverallCond  YearBuilt  YearRemodAdd  \\\n",
       "0    0.235294  0.033420     0.666667        0.500   0.949275      0.883333   \n",
       "1    0.000000  0.038795     0.555556        0.875   0.753623      0.433333   \n",
       "2    0.235294  0.046507     0.666667        0.500   0.934783      0.866667   \n",
       "3    0.294118  0.038561     0.666667        0.500   0.311594      0.333333   \n",
       "4    0.235294  0.060576     0.777778        0.500   0.927536      0.833333   \n",
       "\n",
       "   MasVnrArea  BsmtFinSF1  BsmtFinSF2  BsmtUnfSF    ...     EnclosedPorch  \\\n",
       "0     0.12250    0.125089         0.0   0.064212    ...          0.000000   \n",
       "1     0.00000    0.173281         0.0   0.121575    ...          0.000000   \n",
       "2     0.10125    0.086109         0.0   0.185788    ...          0.000000   \n",
       "3     0.00000    0.038271         0.0   0.231164    ...          0.492754   \n",
       "4     0.21875    0.116052         0.0   0.209760    ...          0.000000   \n",
       "\n",
       "   MiscVal    MoSold  YrSold  WoodDeckSF  OpenPorchSF  EnclosedPorch  \\\n",
       "0      0.0  0.090909    0.50    0.000000     0.111517       0.000000   \n",
       "1      0.0  0.363636    0.25    0.347725     0.000000       0.000000   \n",
       "2      0.0  0.727273    0.50    0.000000     0.076782       0.000000   \n",
       "3      0.0  0.090909    0.00    0.000000     0.063985       0.492754   \n",
       "4      0.0  1.000000    0.50    0.224037     0.153565       0.000000   \n",
       "\n",
       "   3SsnPorch  ScreenPorch  PoolArea  \n",
       "0        0.0          0.0       0.0  \n",
       "1        0.0          0.0       0.0  \n",
       "2        0.0          0.0       0.0  \n",
       "3        0.0          0.0       0.0  \n",
       "4        0.0          0.0       0.0  \n",
       "\n",
       "[5 rows x 37 columns]"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 数值部分标准化\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "mn_x = MinMaxScaler()\n",
    "\n",
    "columns = train_data.columns\n",
    "\n",
    "numerical_features = ['MSSubClass', 'LotArea', 'OverallQual', 'OverallCond', 'YearBuilt', 'YearRemodAdd', 'MasVnrArea',\n",
    "                      'BsmtFinSF1', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', '1stFlrSF', '2ndFlrSF', 'LowQualFinSF', 'GrLivArea', \n",
    "                      'BsmtFullBath', 'BsmtHalfBath', 'FullBath', 'HalfBath', 'BedroomAbvGr', 'KitchenAbvGr', 'TotRmsAbvGrd', \n",
    "                      'Fireplaces', 'GarageYrBlt', 'GarageCars', 'GarageArea', 'WoodDeckSF', 'EnclosedPorch', 'MiscVal', \n",
    "                      'MoSold', 'YrSold', 'WoodDeckSF', 'OpenPorchSF', 'EnclosedPorch', '3SsnPorch', 'ScreenPorch','PoolArea']\n",
    "\n",
    "temp_train = mn_x.fit_transform(train_data[numerical_features])\n",
    "temp_test = mn_x.fit_transform(test_data[numerical_features])\n",
    "\n",
    "x_train_num = pd.DataFrame(data = temp_train, columns = numerical_features, index = train_data.index)\n",
    "# x_test_num = pd.DataFrame(data = temp_test, columns = numerical_features, index = test_data.index)\n",
    "\n",
    "x_train_num.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1460, 243)\n",
      "(1460, 37)\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSZoning_C (all)</th>\n",
       "      <th>MSZoning_FV</th>\n",
       "      <th>MSZoning_RH</th>\n",
       "      <th>MSZoning_RL</th>\n",
       "      <th>MSZoning_RM</th>\n",
       "      <th>Street_Grvl</th>\n",
       "      <th>Street_Pave</th>\n",
       "      <th>LotShape_IR1</th>\n",
       "      <th>LotShape_IR2</th>\n",
       "      <th>LotShape_IR3</th>\n",
       "      <th>...</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <th>OpenPorchSF</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>3SsnPorch</th>\n",
       "      <th>ScreenPorch</th>\n",
       "      <th>PoolArea</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.111517</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.363636</td>\n",
       "      <td>0.25</td>\n",
       "      <td>0.347725</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.076782</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.492754</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.063985</td>\n",
       "      <td>0.492754</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.224037</td>\n",
       "      <td>0.153565</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 280 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   MSZoning_C (all)  MSZoning_FV  MSZoning_RH  MSZoning_RL  MSZoning_RM  \\\n",
       "0                 0            0            0            1            0   \n",
       "1                 0            0            0            1            0   \n",
       "2                 0            0            0            1            0   \n",
       "3                 0            0            0            1            0   \n",
       "4                 0            0            0            1            0   \n",
       "\n",
       "   Street_Grvl  Street_Pave  LotShape_IR1  LotShape_IR2  LotShape_IR3  \\\n",
       "0            0            1             0             0             0   \n",
       "1            0            1             0             0             0   \n",
       "2            0            1             1             0             0   \n",
       "3            0            1             1             0             0   \n",
       "4            0            1             1             0             0   \n",
       "\n",
       "     ...     EnclosedPorch  MiscVal    MoSold  YrSold  WoodDeckSF  \\\n",
       "0    ...          0.000000      0.0  0.090909    0.50    0.000000   \n",
       "1    ...          0.000000      0.0  0.363636    0.25    0.347725   \n",
       "2    ...          0.000000      0.0  0.727273    0.50    0.000000   \n",
       "3    ...          0.492754      0.0  0.090909    0.00    0.000000   \n",
       "4    ...          0.000000      0.0  1.000000    0.50    0.224037   \n",
       "\n",
       "   OpenPorchSF  EnclosedPorch  3SsnPorch  ScreenPorch  PoolArea  \n",
       "0     0.111517       0.000000        0.0          0.0       0.0  \n",
       "1     0.000000       0.000000        0.0          0.0       0.0  \n",
       "2     0.076782       0.000000        0.0          0.0       0.0  \n",
       "3     0.063985       0.492754        0.0          0.0       0.0  \n",
       "4     0.153565       0.000000        0.0          0.0       0.0  \n",
       "\n",
       "[5 rows x 280 columns]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train = pd.concat([x_train_cat, x_train_num], axis = 1, ignore_index = False)\n",
    "print(x_train_cat.shape)\n",
    "print(x_train_num.shape)\n",
    "x_train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# x_test = pd.concat([x_test_cat, x_test_num], axis = 1, ignore_index = False)\n",
    "# print(x_test_cat.shape)\n",
    "# print(x_test_num.shape)\n",
    "# x_test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据标准化\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 初始化对目标值的标准化器\n",
    "mean_y = y_train.mean()\n",
    "std_y = y_train.std()\n",
    "y_train = (y_train - mean_y)/std_y\n",
    "\n",
    "# 分别初始化对特征和目标值的标准化器\n",
    "# ss_x = StandardScaler()\n",
    "# ss_y = StandardScaler()\n",
    "\n",
    "# 分别对训练和测试数据的特征以及目标值进行标准化处理\n",
    "# x_train = ss_x.fit_transform(x_train)\n",
    "# x_test = ss_x.transform(x_test)\n",
    "\n",
    "#对y做标准化不是必须\n",
    "#对y标准化的好处是不同问题的w差异不太大，同时正则参数的范围也有限\n",
    "# y_train = ss_y.fit_transform(y_train.reshape(-1, 1))\n",
    "# y_test = ss_y.transform(y_test.reshape(-1, 1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 两两特征相关性分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data = x_train\n",
    "train_data['SalePrice'] = y_train\n",
    "test_data = x_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSZoning_C (all)</th>\n",
       "      <th>MSZoning_FV</th>\n",
       "      <th>MSZoning_RH</th>\n",
       "      <th>MSZoning_RL</th>\n",
       "      <th>MSZoning_RM</th>\n",
       "      <th>Street_Grvl</th>\n",
       "      <th>Street_Pave</th>\n",
       "      <th>LotShape_IR1</th>\n",
       "      <th>LotShape_IR2</th>\n",
       "      <th>LotShape_IR3</th>\n",
       "      <th>...</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <th>OpenPorchSF</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>3SsnPorch</th>\n",
       "      <th>ScreenPorch</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>MSZoning_C (all)</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.017926</td>\n",
       "      <td>-0.008742</td>\n",
       "      <td>-0.160278</td>\n",
       "      <td>-0.034792</td>\n",
       "      <td>0.254287</td>\n",
       "      <td>-0.254287</td>\n",
       "      <td>-0.040840</td>\n",
       "      <td>-0.014116</td>\n",
       "      <td>-0.006897</td>\n",
       "      <td>...</td>\n",
       "      <td>0.002999</td>\n",
       "      <td>0.042344</td>\n",
       "      <td>0.030290</td>\n",
       "      <td>-0.055969</td>\n",
       "      <td>0.022243</td>\n",
       "      <td>0.082295</td>\n",
       "      <td>-0.009661</td>\n",
       "      <td>-0.007689</td>\n",
       "      <td>-0.005705</td>\n",
       "      <td>-0.111257</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MSZoning_FV</th>\n",
       "      <td>-0.017926</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.022722</td>\n",
       "      <td>-0.416608</td>\n",
       "      <td>-0.090435</td>\n",
       "      <td>-0.013866</td>\n",
       "      <td>0.013866</td>\n",
       "      <td>-0.081464</td>\n",
       "      <td>0.023612</td>\n",
       "      <td>-0.017926</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.018928</td>\n",
       "      <td>-0.003594</td>\n",
       "      <td>0.004943</td>\n",
       "      <td>-0.063687</td>\n",
       "      <td>0.185169</td>\n",
       "      <td>-0.077563</td>\n",
       "      <td>-0.025113</td>\n",
       "      <td>-0.046530</td>\n",
       "      <td>-0.014828</td>\n",
       "      <td>0.089950</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MSZoning_RH</th>\n",
       "      <td>-0.008742</td>\n",
       "      <td>-0.022722</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.203158</td>\n",
       "      <td>-0.044101</td>\n",
       "      <td>-0.006762</td>\n",
       "      <td>0.006762</td>\n",
       "      <td>-0.046176</td>\n",
       "      <td>0.021930</td>\n",
       "      <td>-0.008742</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.009230</td>\n",
       "      <td>0.045883</td>\n",
       "      <td>-0.025035</td>\n",
       "      <td>-0.022364</td>\n",
       "      <td>-0.029259</td>\n",
       "      <td>0.063286</td>\n",
       "      <td>-0.012246</td>\n",
       "      <td>-0.028443</td>\n",
       "      <td>-0.007231</td>\n",
       "      <td>-0.065429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MSZoning_RL</th>\n",
       "      <td>-0.160278</td>\n",
       "      <td>-0.416608</td>\n",
       "      <td>-0.203158</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.808585</td>\n",
       "      <td>-0.045348</td>\n",
       "      <td>0.045348</td>\n",
       "      <td>0.261574</td>\n",
       "      <td>0.027175</td>\n",
       "      <td>0.022698</td>\n",
       "      <td>...</td>\n",
       "      <td>0.016581</td>\n",
       "      <td>-0.003429</td>\n",
       "      <td>0.012716</td>\n",
       "      <td>0.167734</td>\n",
       "      <td>-0.044253</td>\n",
       "      <td>-0.159896</td>\n",
       "      <td>0.051525</td>\n",
       "      <td>0.061666</td>\n",
       "      <td>0.035591</td>\n",
       "      <td>0.245063</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MSZoning_RM</th>\n",
       "      <td>-0.034792</td>\n",
       "      <td>-0.090435</td>\n",
       "      <td>-0.044101</td>\n",
       "      <td>-0.808585</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.003127</td>\n",
       "      <td>-0.003127</td>\n",
       "      <td>-0.229711</td>\n",
       "      <td>-0.047949</td>\n",
       "      <td>-0.011491</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.006047</td>\n",
       "      <td>-0.017192</td>\n",
       "      <td>-0.017131</td>\n",
       "      <td>-0.135901</td>\n",
       "      <td>-0.053039</td>\n",
       "      <td>0.190614</td>\n",
       "      <td>-0.038708</td>\n",
       "      <td>-0.033662</td>\n",
       "      <td>-0.028779</td>\n",
       "      <td>-0.288065</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Street_Grvl</th>\n",
       "      <td>0.254287</td>\n",
       "      <td>-0.013866</td>\n",
       "      <td>-0.006762</td>\n",
       "      <td>-0.045348</td>\n",
       "      <td>0.003127</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-1.000000</td>\n",
       "      <td>-0.022494</td>\n",
       "      <td>0.053886</td>\n",
       "      <td>-0.005335</td>\n",
       "      <td>...</td>\n",
       "      <td>0.022733</td>\n",
       "      <td>-0.003690</td>\n",
       "      <td>0.025043</td>\n",
       "      <td>0.017990</td>\n",
       "      <td>0.005664</td>\n",
       "      <td>-0.023082</td>\n",
       "      <td>-0.007473</td>\n",
       "      <td>0.033160</td>\n",
       "      <td>-0.004413</td>\n",
       "      <td>-0.041036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Street_Pave</th>\n",
       "      <td>-0.254287</td>\n",
       "      <td>0.013866</td>\n",
       "      <td>0.006762</td>\n",
       "      <td>0.045348</td>\n",
       "      <td>-0.003127</td>\n",
       "      <td>-1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.022494</td>\n",
       "      <td>-0.053886</td>\n",
       "      <td>0.005335</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.022733</td>\n",
       "      <td>0.003690</td>\n",
       "      <td>-0.025043</td>\n",
       "      <td>-0.017990</td>\n",
       "      <td>-0.005664</td>\n",
       "      <td>0.023082</td>\n",
       "      <td>0.007473</td>\n",
       "      <td>-0.033160</td>\n",
       "      <td>0.004413</td>\n",
       "      <td>0.041036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LotShape_IR1</th>\n",
       "      <td>-0.040840</td>\n",
       "      <td>-0.081464</td>\n",
       "      <td>-0.046176</td>\n",
       "      <td>0.261574</td>\n",
       "      <td>-0.229711</td>\n",
       "      <td>-0.022494</td>\n",
       "      <td>0.022494</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.119701</td>\n",
       "      <td>-0.058481</td>\n",
       "      <td>...</td>\n",
       "      <td>0.043950</td>\n",
       "      <td>0.032942</td>\n",
       "      <td>-0.035973</td>\n",
       "      <td>0.151257</td>\n",
       "      <td>0.059189</td>\n",
       "      <td>-0.063458</td>\n",
       "      <td>0.031960</td>\n",
       "      <td>0.038985</td>\n",
       "      <td>0.017269</td>\n",
       "      <td>0.223284</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LotShape_IR2</th>\n",
       "      <td>-0.014116</td>\n",
       "      <td>0.023612</td>\n",
       "      <td>0.021930</td>\n",
       "      <td>0.027175</td>\n",
       "      <td>-0.047949</td>\n",
       "      <td>0.053886</td>\n",
       "      <td>-0.053886</td>\n",
       "      <td>-0.119701</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.014116</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.006713</td>\n",
       "      <td>0.002763</td>\n",
       "      <td>0.004853</td>\n",
       "      <td>0.063166</td>\n",
       "      <td>0.062904</td>\n",
       "      <td>-0.054768</td>\n",
       "      <td>0.021249</td>\n",
       "      <td>0.059691</td>\n",
       "      <td>-0.011676</td>\n",
       "      <td>0.126096</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LotShape_IR3</th>\n",
       "      <td>-0.006897</td>\n",
       "      <td>-0.017926</td>\n",
       "      <td>-0.008742</td>\n",
       "      <td>0.022698</td>\n",
       "      <td>-0.011491</td>\n",
       "      <td>-0.005335</td>\n",
       "      <td>0.005335</td>\n",
       "      <td>-0.058481</td>\n",
       "      <td>-0.014116</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.007282</td>\n",
       "      <td>-0.003746</td>\n",
       "      <td>-0.026006</td>\n",
       "      <td>0.008322</td>\n",
       "      <td>0.022493</td>\n",
       "      <td>-0.029840</td>\n",
       "      <td>-0.009661</td>\n",
       "      <td>-0.000538</td>\n",
       "      <td>0.093544</td>\n",
       "      <td>0.036720</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LotShape_Reg</th>\n",
       "      <td>0.045922</td>\n",
       "      <td>0.074564</td>\n",
       "      <td>0.039092</td>\n",
       "      <td>-0.268764</td>\n",
       "      <td>0.242838</td>\n",
       "      <td>0.004414</td>\n",
       "      <td>-0.004414</td>\n",
       "      <td>-0.925959</td>\n",
       "      <td>-0.223509</td>\n",
       "      <td>-0.109197</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.039392</td>\n",
       "      <td>-0.032491</td>\n",
       "      <td>0.037933</td>\n",
       "      <td>-0.170862</td>\n",
       "      <td>-0.083247</td>\n",
       "      <td>0.085886</td>\n",
       "      <td>-0.036857</td>\n",
       "      <td>-0.058464</td>\n",
       "      <td>-0.028880</td>\n",
       "      <td>-0.267672</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LandContour_Bnk</th>\n",
       "      <td>0.023234</td>\n",
       "      <td>-0.045840</td>\n",
       "      <td>0.107156</td>\n",
       "      <td>-0.063265</td>\n",
       "      <td>0.062357</td>\n",
       "      <td>0.091738</td>\n",
       "      <td>-0.091738</td>\n",
       "      <td>-0.013497</td>\n",
       "      <td>0.025113</td>\n",
       "      <td>0.064104</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.018254</td>\n",
       "      <td>-0.036519</td>\n",
       "      <td>-0.008613</td>\n",
       "      <td>-0.051234</td>\n",
       "      <td>-0.020540</td>\n",
       "      <td>0.087880</td>\n",
       "      <td>-0.008144</td>\n",
       "      <td>-0.004586</td>\n",
       "      <td>0.025697</td>\n",
       "      <td>-0.101124</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LandContour_HLS</th>\n",
       "      <td>0.030026</td>\n",
       "      <td>-0.040649</td>\n",
       "      <td>0.052529</td>\n",
       "      <td>0.023808</td>\n",
       "      <td>-0.026057</td>\n",
       "      <td>0.046774</td>\n",
       "      <td>-0.046774</td>\n",
       "      <td>0.123403</td>\n",
       "      <td>0.059178</td>\n",
       "      <td>0.030026</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.008159</td>\n",
       "      <td>0.070935</td>\n",
       "      <td>-0.019255</td>\n",
       "      <td>0.051634</td>\n",
       "      <td>-0.042875</td>\n",
       "      <td>-0.025070</td>\n",
       "      <td>0.040932</td>\n",
       "      <td>-0.015882</td>\n",
       "      <td>-0.012935</td>\n",
       "      <td>0.120014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LandContour_Low</th>\n",
       "      <td>0.093897</td>\n",
       "      <td>-0.034321</td>\n",
       "      <td>-0.016737</td>\n",
       "      <td>0.060758</td>\n",
       "      <td>-0.066614</td>\n",
       "      <td>0.058824</td>\n",
       "      <td>-0.058824</td>\n",
       "      <td>0.047527</td>\n",
       "      <td>0.106643</td>\n",
       "      <td>0.093897</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.004503</td>\n",
       "      <td>0.030087</td>\n",
       "      <td>-0.014528</td>\n",
       "      <td>0.093419</td>\n",
       "      <td>-0.004252</td>\n",
       "      <td>-0.018675</td>\n",
       "      <td>0.033645</td>\n",
       "      <td>0.037782</td>\n",
       "      <td>-0.010922</td>\n",
       "      <td>0.045528</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LandContour_Lvl</th>\n",
       "      <td>-0.081736</td>\n",
       "      <td>0.072772</td>\n",
       "      <td>-0.094910</td>\n",
       "      <td>-0.002963</td>\n",
       "      <td>0.007923</td>\n",
       "      <td>-0.119812</td>\n",
       "      <td>0.119812</td>\n",
       "      <td>-0.089423</td>\n",
       "      <td>-0.107040</td>\n",
       "      <td>-0.109169</td>\n",
       "      <td>...</td>\n",
       "      <td>0.019461</td>\n",
       "      <td>-0.033515</td>\n",
       "      <td>0.024792</td>\n",
       "      <td>-0.044487</td>\n",
       "      <td>0.041723</td>\n",
       "      <td>-0.034360</td>\n",
       "      <td>-0.036360</td>\n",
       "      <td>-0.006735</td>\n",
       "      <td>-0.003883</td>\n",
       "      <td>-0.027545</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LotConfig_Corner</th>\n",
       "      <td>0.004292</td>\n",
       "      <td>-0.040692</td>\n",
       "      <td>-0.015102</td>\n",
       "      <td>0.029069</td>\n",
       "      <td>-0.006350</td>\n",
       "      <td>0.025608</td>\n",
       "      <td>-0.025608</td>\n",
       "      <td>0.075015</td>\n",
       "      <td>0.006628</td>\n",
       "      <td>0.004292</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.012425</td>\n",
       "      <td>-0.010989</td>\n",
       "      <td>-0.002072</td>\n",
       "      <td>-0.004585</td>\n",
       "      <td>0.034937</td>\n",
       "      <td>0.117239</td>\n",
       "      <td>-0.002355</td>\n",
       "      <td>0.003388</td>\n",
       "      <td>0.036450</td>\n",
       "      <td>0.004145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LotConfig_CulDSac</th>\n",
       "      <td>-0.021785</td>\n",
       "      <td>-0.043094</td>\n",
       "      <td>-0.027613</td>\n",
       "      <td>0.129087</td>\n",
       "      <td>-0.109902</td>\n",
       "      <td>-0.016851</td>\n",
       "      <td>0.016851</td>\n",
       "      <td>0.271735</td>\n",
       "      <td>0.191897</td>\n",
       "      <td>0.045887</td>\n",
       "      <td>...</td>\n",
       "      <td>0.070967</td>\n",
       "      <td>-0.009562</td>\n",
       "      <td>0.009079</td>\n",
       "      <td>0.085105</td>\n",
       "      <td>0.030207</td>\n",
       "      <td>-0.061236</td>\n",
       "      <td>0.052705</td>\n",
       "      <td>0.025147</td>\n",
       "      <td>0.033259</td>\n",
       "      <td>0.141818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LotConfig_FR2</th>\n",
       "      <td>-0.015146</td>\n",
       "      <td>0.017075</td>\n",
       "      <td>-0.019198</td>\n",
       "      <td>0.018499</td>\n",
       "      <td>-0.021970</td>\n",
       "      <td>-0.011716</td>\n",
       "      <td>0.011716</td>\n",
       "      <td>-0.004788</td>\n",
       "      <td>0.086440</td>\n",
       "      <td>-0.015146</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.008560</td>\n",
       "      <td>-0.018852</td>\n",
       "      <td>0.022387</td>\n",
       "      <td>0.006055</td>\n",
       "      <td>0.038080</td>\n",
       "      <td>-0.059056</td>\n",
       "      <td>0.041277</td>\n",
       "      <td>-0.043711</td>\n",
       "      <td>-0.012528</td>\n",
       "      <td>-0.006859</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LotConfig_FR3</th>\n",
       "      <td>-0.004353</td>\n",
       "      <td>0.052219</td>\n",
       "      <td>-0.005517</td>\n",
       "      <td>-0.069080</td>\n",
       "      <td>0.051574</td>\n",
       "      <td>-0.003367</td>\n",
       "      <td>0.003367</td>\n",
       "      <td>-0.009075</td>\n",
       "      <td>-0.008909</td>\n",
       "      <td>-0.004353</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.004596</td>\n",
       "      <td>-0.001395</td>\n",
       "      <td>-0.032205</td>\n",
       "      <td>0.000944</td>\n",
       "      <td>-0.015360</td>\n",
       "      <td>-0.000819</td>\n",
       "      <td>-0.006098</td>\n",
       "      <td>-0.014163</td>\n",
       "      <td>-0.003600</td>\n",
       "      <td>0.018186</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LotConfig_Inside</th>\n",
       "      <td>0.014704</td>\n",
       "      <td>0.045621</td>\n",
       "      <td>0.036231</td>\n",
       "      <td>-0.094730</td>\n",
       "      <td>0.068184</td>\n",
       "      <td>-0.007713</td>\n",
       "      <td>0.007713</td>\n",
       "      <td>-0.209930</td>\n",
       "      <td>-0.143599</td>\n",
       "      <td>-0.022310</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.024272</td>\n",
       "      <td>0.022219</td>\n",
       "      <td>-0.008246</td>\n",
       "      <td>-0.045114</td>\n",
       "      <td>-0.059633</td>\n",
       "      <td>-0.043587</td>\n",
       "      <td>-0.042337</td>\n",
       "      <td>0.002187</td>\n",
       "      <td>-0.044061</td>\n",
       "      <td>-0.080538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LandSlope_Gtl</th>\n",
       "      <td>-0.091058</td>\n",
       "      <td>0.051282</td>\n",
       "      <td>-0.004248</td>\n",
       "      <td>-0.041072</td>\n",
       "      <td>0.039710</td>\n",
       "      <td>-0.175177</td>\n",
       "      <td>0.175177</td>\n",
       "      <td>-0.065622</td>\n",
       "      <td>-0.107106</td>\n",
       "      <td>-0.017200</td>\n",
       "      <td>...</td>\n",
       "      <td>0.008218</td>\n",
       "      <td>-0.004384</td>\n",
       "      <td>0.010619</td>\n",
       "      <td>-0.092663</td>\n",
       "      <td>0.027063</td>\n",
       "      <td>0.004707</td>\n",
       "      <td>-0.001772</td>\n",
       "      <td>-0.060177</td>\n",
       "      <td>0.016319</td>\n",
       "      <td>-0.051116</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LandSlope_Mod</th>\n",
       "      <td>0.102868</td>\n",
       "      <td>-0.046595</td>\n",
       "      <td>0.009176</td>\n",
       "      <td>0.022413</td>\n",
       "      <td>-0.025210</td>\n",
       "      <td>0.141864</td>\n",
       "      <td>-0.141864</td>\n",
       "      <td>0.052570</td>\n",
       "      <td>0.063815</td>\n",
       "      <td>-0.017926</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.013210</td>\n",
       "      <td>0.000093</td>\n",
       "      <td>-0.020071</td>\n",
       "      <td>0.074666</td>\n",
       "      <td>-0.015339</td>\n",
       "      <td>0.001575</td>\n",
       "      <td>-0.007776</td>\n",
       "      <td>0.060297</td>\n",
       "      <td>-0.014828</td>\n",
       "      <td>0.042981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LandSlope_Sev</th>\n",
       "      <td>-0.007871</td>\n",
       "      <td>-0.020460</td>\n",
       "      <td>-0.009977</td>\n",
       "      <td>0.049111</td>\n",
       "      <td>-0.039710</td>\n",
       "      <td>0.107881</td>\n",
       "      <td>-0.107881</td>\n",
       "      <td>0.041669</td>\n",
       "      <td>0.116288</td>\n",
       "      <td>0.080531</td>\n",
       "      <td>...</td>\n",
       "      <td>0.009330</td>\n",
       "      <td>0.010292</td>\n",
       "      <td>0.018646</td>\n",
       "      <td>0.057890</td>\n",
       "      <td>-0.031107</td>\n",
       "      <td>-0.014726</td>\n",
       "      <td>0.021314</td>\n",
       "      <td>0.011669</td>\n",
       "      <td>-0.006511</td>\n",
       "      <td>0.027998</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Neighborhood_Blmngtn</th>\n",
       "      <td>-0.009014</td>\n",
       "      <td>-0.023429</td>\n",
       "      <td>-0.011425</td>\n",
       "      <td>0.040608</td>\n",
       "      <td>-0.027559</td>\n",
       "      <td>-0.006972</td>\n",
       "      <td>0.006972</td>\n",
       "      <td>-0.076434</td>\n",
       "      <td>-0.018450</td>\n",
       "      <td>-0.009014</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.009518</td>\n",
       "      <td>-0.024740</td>\n",
       "      <td>-0.028219</td>\n",
       "      <td>0.045955</td>\n",
       "      <td>-0.051016</td>\n",
       "      <td>-0.039001</td>\n",
       "      <td>-0.012628</td>\n",
       "      <td>-0.012834</td>\n",
       "      <td>-0.007456</td>\n",
       "      <td>0.019066</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Neighborhood_Blueste</th>\n",
       "      <td>-0.003076</td>\n",
       "      <td>-0.007995</td>\n",
       "      <td>-0.003899</td>\n",
       "      <td>-0.071482</td>\n",
       "      <td>0.088403</td>\n",
       "      <td>-0.002379</td>\n",
       "      <td>0.002379</td>\n",
       "      <td>-0.026082</td>\n",
       "      <td>-0.006296</td>\n",
       "      <td>-0.003076</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.003248</td>\n",
       "      <td>-0.004411</td>\n",
       "      <td>0.019088</td>\n",
       "      <td>0.018107</td>\n",
       "      <td>-0.026092</td>\n",
       "      <td>-0.013308</td>\n",
       "      <td>-0.004309</td>\n",
       "      <td>-0.010008</td>\n",
       "      <td>-0.002544</td>\n",
       "      <td>-0.020250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Neighborhood_BrDale</th>\n",
       "      <td>-0.008742</td>\n",
       "      <td>-0.022722</td>\n",
       "      <td>-0.011080</td>\n",
       "      <td>-0.203158</td>\n",
       "      <td>0.251252</td>\n",
       "      <td>-0.006762</td>\n",
       "      <td>0.006762</td>\n",
       "      <td>-0.074127</td>\n",
       "      <td>-0.017893</td>\n",
       "      <td>-0.008742</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.009230</td>\n",
       "      <td>-0.019841</td>\n",
       "      <td>-0.010169</td>\n",
       "      <td>-0.021838</td>\n",
       "      <td>-0.061442</td>\n",
       "      <td>-0.037824</td>\n",
       "      <td>-0.012246</td>\n",
       "      <td>-0.028443</td>\n",
       "      <td>-0.007231</td>\n",
       "      <td>-0.101303</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Neighborhood_BrkSide</th>\n",
       "      <td>-0.016891</td>\n",
       "      <td>-0.043905</td>\n",
       "      <td>-0.021410</td>\n",
       "      <td>-0.152169</td>\n",
       "      <td>0.209974</td>\n",
       "      <td>-0.013066</td>\n",
       "      <td>0.013066</td>\n",
       "      <td>-0.031491</td>\n",
       "      <td>-0.034573</td>\n",
       "      <td>-0.016891</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.003199</td>\n",
       "      <td>-0.008656</td>\n",
       "      <td>-0.021960</td>\n",
       "      <td>-0.094801</td>\n",
       "      <td>-0.065457</td>\n",
       "      <td>0.059558</td>\n",
       "      <td>-0.006432</td>\n",
       "      <td>0.021295</td>\n",
       "      <td>-0.013972</td>\n",
       "      <td>-0.143648</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Neighborhood_ClearCr</th>\n",
       "      <td>-0.011612</td>\n",
       "      <td>-0.030184</td>\n",
       "      <td>-0.014719</td>\n",
       "      <td>0.072452</td>\n",
       "      <td>-0.058583</td>\n",
       "      <td>-0.008983</td>\n",
       "      <td>0.008983</td>\n",
       "      <td>0.039440</td>\n",
       "      <td>0.127375</td>\n",
       "      <td>-0.011612</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.003199</td>\n",
       "      <td>0.023996</td>\n",
       "      <td>-0.003164</td>\n",
       "      <td>0.105549</td>\n",
       "      <td>0.038342</td>\n",
       "      <td>0.024218</td>\n",
       "      <td>0.005884</td>\n",
       "      <td>0.049842</td>\n",
       "      <td>-0.009605</td>\n",
       "      <td>0.055718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Neighborhood_CollgCr</th>\n",
       "      <td>-0.028101</td>\n",
       "      <td>-0.073043</td>\n",
       "      <td>-0.035619</td>\n",
       "      <td>0.120101</td>\n",
       "      <td>-0.078471</td>\n",
       "      <td>-0.021737</td>\n",
       "      <td>0.021737</td>\n",
       "      <td>0.015689</td>\n",
       "      <td>0.079030</td>\n",
       "      <td>-0.000749</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.018528</td>\n",
       "      <td>-0.022777</td>\n",
       "      <td>-0.002316</td>\n",
       "      <td>0.054217</td>\n",
       "      <td>0.025850</td>\n",
       "      <td>-0.120334</td>\n",
       "      <td>-0.009425</td>\n",
       "      <td>-0.065329</td>\n",
       "      <td>-0.023244</td>\n",
       "      <td>0.072626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Neighborhood_Crawfor</th>\n",
       "      <td>-0.015800</td>\n",
       "      <td>-0.041068</td>\n",
       "      <td>0.051637</td>\n",
       "      <td>0.052913</td>\n",
       "      <td>-0.048306</td>\n",
       "      <td>-0.012221</td>\n",
       "      <td>0.012221</td>\n",
       "      <td>0.064133</td>\n",
       "      <td>-0.032339</td>\n",
       "      <td>-0.015800</td>\n",
       "      <td>...</td>\n",
       "      <td>0.002122</td>\n",
       "      <td>0.038071</td>\n",
       "      <td>-0.046653</td>\n",
       "      <td>-0.063282</td>\n",
       "      <td>-0.056473</td>\n",
       "      <td>0.075425</td>\n",
       "      <td>0.048001</td>\n",
       "      <td>0.051594</td>\n",
       "      <td>-0.013069</td>\n",
       "      <td>0.071160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BsmtFinSF2</th>\n",
       "      <td>-0.023971</td>\n",
       "      <td>-0.062308</td>\n",
       "      <td>-0.024714</td>\n",
       "      <td>0.082900</td>\n",
       "      <td>-0.046188</td>\n",
       "      <td>0.038487</td>\n",
       "      <td>-0.038487</td>\n",
       "      <td>0.025300</td>\n",
       "      <td>0.056726</td>\n",
       "      <td>0.018256</td>\n",
       "      <td>...</td>\n",
       "      <td>0.004940</td>\n",
       "      <td>-0.015211</td>\n",
       "      <td>0.031706</td>\n",
       "      <td>0.067898</td>\n",
       "      <td>0.003093</td>\n",
       "      <td>0.036543</td>\n",
       "      <td>-0.029993</td>\n",
       "      <td>0.088871</td>\n",
       "      <td>0.041709</td>\n",
       "      <td>-0.011378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BsmtUnfSF</th>\n",
       "      <td>-0.003693</td>\n",
       "      <td>0.046856</td>\n",
       "      <td>-0.014519</td>\n",
       "      <td>0.011716</td>\n",
       "      <td>-0.035448</td>\n",
       "      <td>-0.035229</td>\n",
       "      <td>0.035229</td>\n",
       "      <td>0.021775</td>\n",
       "      <td>0.001972</td>\n",
       "      <td>-0.010705</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.023837</td>\n",
       "      <td>0.034888</td>\n",
       "      <td>-0.041258</td>\n",
       "      <td>-0.005316</td>\n",
       "      <td>0.129005</td>\n",
       "      <td>-0.002538</td>\n",
       "      <td>0.020764</td>\n",
       "      <td>-0.012579</td>\n",
       "      <td>-0.035092</td>\n",
       "      <td>0.214479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>TotalBsmtSF</th>\n",
       "      <td>-0.054352</td>\n",
       "      <td>-0.032689</td>\n",
       "      <td>-0.055128</td>\n",
       "      <td>0.257373</td>\n",
       "      <td>-0.247379</td>\n",
       "      <td>-0.005068</td>\n",
       "      <td>0.005068</td>\n",
       "      <td>0.160590</td>\n",
       "      <td>0.032344</td>\n",
       "      <td>0.122890</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.018479</td>\n",
       "      <td>0.013196</td>\n",
       "      <td>-0.014969</td>\n",
       "      <td>0.232019</td>\n",
       "      <td>0.247264</td>\n",
       "      <td>-0.095478</td>\n",
       "      <td>0.037384</td>\n",
       "      <td>0.084489</td>\n",
       "      <td>0.126053</td>\n",
       "      <td>0.613581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1stFlrSF</th>\n",
       "      <td>-0.066880</td>\n",
       "      <td>-0.095486</td>\n",
       "      <td>-0.039343</td>\n",
       "      <td>0.304731</td>\n",
       "      <td>-0.267029</td>\n",
       "      <td>-0.005950</td>\n",
       "      <td>0.005950</td>\n",
       "      <td>0.157330</td>\n",
       "      <td>0.040544</td>\n",
       "      <td>0.091752</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.021096</td>\n",
       "      <td>0.031372</td>\n",
       "      <td>-0.013604</td>\n",
       "      <td>0.235459</td>\n",
       "      <td>0.211671</td>\n",
       "      <td>-0.065292</td>\n",
       "      <td>0.056104</td>\n",
       "      <td>0.088758</td>\n",
       "      <td>0.131525</td>\n",
       "      <td>0.605852</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2ndFlrSF</th>\n",
       "      <td>-0.011093</td>\n",
       "      <td>0.114848</td>\n",
       "      <td>0.027199</td>\n",
       "      <td>-0.099247</td>\n",
       "      <td>0.041907</td>\n",
       "      <td>-0.046983</td>\n",
       "      <td>0.046983</td>\n",
       "      <td>0.040629</td>\n",
       "      <td>0.074735</td>\n",
       "      <td>0.033172</td>\n",
       "      <td>...</td>\n",
       "      <td>0.016197</td>\n",
       "      <td>0.035164</td>\n",
       "      <td>-0.028700</td>\n",
       "      <td>0.092165</td>\n",
       "      <td>0.208026</td>\n",
       "      <td>0.061989</td>\n",
       "      <td>-0.024358</td>\n",
       "      <td>0.040606</td>\n",
       "      <td>0.081487</td>\n",
       "      <td>0.319334</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LowQualFinSF</th>\n",
       "      <td>0.077662</td>\n",
       "      <td>-0.009558</td>\n",
       "      <td>0.057049</td>\n",
       "      <td>-0.095146</td>\n",
       "      <td>0.079942</td>\n",
       "      <td>-0.007724</td>\n",
       "      <td>0.007724</td>\n",
       "      <td>-0.027681</td>\n",
       "      <td>0.032871</td>\n",
       "      <td>-0.009986</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.003793</td>\n",
       "      <td>-0.022174</td>\n",
       "      <td>-0.028921</td>\n",
       "      <td>-0.025444</td>\n",
       "      <td>0.018251</td>\n",
       "      <td>0.061081</td>\n",
       "      <td>-0.004296</td>\n",
       "      <td>0.026799</td>\n",
       "      <td>0.062157</td>\n",
       "      <td>-0.025606</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GrLivArea</th>\n",
       "      <td>-0.051232</td>\n",
       "      <td>0.024275</td>\n",
       "      <td>-0.001070</td>\n",
       "      <td>0.132936</td>\n",
       "      <td>-0.154239</td>\n",
       "      <td>-0.044121</td>\n",
       "      <td>0.044121</td>\n",
       "      <td>0.146935</td>\n",
       "      <td>0.094953</td>\n",
       "      <td>0.094133</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.002416</td>\n",
       "      <td>0.050240</td>\n",
       "      <td>-0.036526</td>\n",
       "      <td>0.247433</td>\n",
       "      <td>0.330224</td>\n",
       "      <td>0.009113</td>\n",
       "      <td>0.020643</td>\n",
       "      <td>0.101510</td>\n",
       "      <td>0.170205</td>\n",
       "      <td>0.708624</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BsmtFullBath</th>\n",
       "      <td>-0.052085</td>\n",
       "      <td>-0.042555</td>\n",
       "      <td>-0.022898</td>\n",
       "      <td>0.146855</td>\n",
       "      <td>-0.124944</td>\n",
       "      <td>0.050524</td>\n",
       "      <td>-0.050524</td>\n",
       "      <td>0.078912</td>\n",
       "      <td>-0.019494</td>\n",
       "      <td>0.027961</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.023047</td>\n",
       "      <td>-0.025361</td>\n",
       "      <td>0.067049</td>\n",
       "      <td>0.175315</td>\n",
       "      <td>0.067341</td>\n",
       "      <td>-0.049911</td>\n",
       "      <td>-0.000106</td>\n",
       "      <td>0.023148</td>\n",
       "      <td>0.067616</td>\n",
       "      <td>0.227122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BsmtHalfBath</th>\n",
       "      <td>0.014776</td>\n",
       "      <td>-0.052035</td>\n",
       "      <td>-0.025375</td>\n",
       "      <td>0.068697</td>\n",
       "      <td>-0.044629</td>\n",
       "      <td>-0.015485</td>\n",
       "      <td>0.015485</td>\n",
       "      <td>0.007031</td>\n",
       "      <td>0.080619</td>\n",
       "      <td>0.014776</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.007367</td>\n",
       "      <td>0.032873</td>\n",
       "      <td>-0.046524</td>\n",
       "      <td>0.040161</td>\n",
       "      <td>-0.025324</td>\n",
       "      <td>-0.008555</td>\n",
       "      <td>0.035114</td>\n",
       "      <td>0.032121</td>\n",
       "      <td>0.020025</td>\n",
       "      <td>-0.016844</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>FullBath</th>\n",
       "      <td>-0.085208</td>\n",
       "      <td>0.170472</td>\n",
       "      <td>-0.012437</td>\n",
       "      <td>0.123634</td>\n",
       "      <td>-0.217000</td>\n",
       "      <td>-0.046471</td>\n",
       "      <td>0.046471</td>\n",
       "      <td>0.133434</td>\n",
       "      <td>0.096601</td>\n",
       "      <td>0.050505</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.014290</td>\n",
       "      <td>0.055872</td>\n",
       "      <td>-0.019669</td>\n",
       "      <td>0.187703</td>\n",
       "      <td>0.259977</td>\n",
       "      <td>-0.115093</td>\n",
       "      <td>0.035353</td>\n",
       "      <td>-0.008106</td>\n",
       "      <td>0.049604</td>\n",
       "      <td>0.560664</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>HalfBath</th>\n",
       "      <td>-0.046730</td>\n",
       "      <td>0.146078</td>\n",
       "      <td>-0.067084</td>\n",
       "      <td>0.057734</td>\n",
       "      <td>-0.120295</td>\n",
       "      <td>-0.027628</td>\n",
       "      <td>0.027628</td>\n",
       "      <td>0.097500</td>\n",
       "      <td>0.051973</td>\n",
       "      <td>0.019348</td>\n",
       "      <td>...</td>\n",
       "      <td>0.001290</td>\n",
       "      <td>-0.009050</td>\n",
       "      <td>-0.010269</td>\n",
       "      <td>0.108080</td>\n",
       "      <td>0.199740</td>\n",
       "      <td>-0.095317</td>\n",
       "      <td>-0.004972</td>\n",
       "      <td>0.072426</td>\n",
       "      <td>0.022381</td>\n",
       "      <td>0.284108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>BedroomAbvGr</th>\n",
       "      <td>-0.057683</td>\n",
       "      <td>-0.066453</td>\n",
       "      <td>0.065644</td>\n",
       "      <td>0.139264</td>\n",
       "      <td>-0.126983</td>\n",
       "      <td>-0.028865</td>\n",
       "      <td>0.028865</td>\n",
       "      <td>0.042184</td>\n",
       "      <td>0.027839</td>\n",
       "      <td>0.023785</td>\n",
       "      <td>...</td>\n",
       "      <td>0.007767</td>\n",
       "      <td>0.046544</td>\n",
       "      <td>-0.036014</td>\n",
       "      <td>0.046854</td>\n",
       "      <td>0.093810</td>\n",
       "      <td>0.041570</td>\n",
       "      <td>-0.024478</td>\n",
       "      <td>0.044300</td>\n",
       "      <td>0.070703</td>\n",
       "      <td>0.168213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>KitchenAbvGr</th>\n",
       "      <td>0.020143</td>\n",
       "      <td>-0.045644</td>\n",
       "      <td>0.127085</td>\n",
       "      <td>-0.088371</td>\n",
       "      <td>0.085912</td>\n",
       "      <td>-0.013583</td>\n",
       "      <td>0.013583</td>\n",
       "      <td>-0.082850</td>\n",
       "      <td>-0.035943</td>\n",
       "      <td>-0.017560</td>\n",
       "      <td>...</td>\n",
       "      <td>0.062341</td>\n",
       "      <td>0.026589</td>\n",
       "      <td>0.031687</td>\n",
       "      <td>-0.090130</td>\n",
       "      <td>-0.070091</td>\n",
       "      <td>0.037312</td>\n",
       "      <td>-0.024600</td>\n",
       "      <td>-0.051613</td>\n",
       "      <td>-0.014525</td>\n",
       "      <td>-0.135907</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>TotRmsAbvGrd</th>\n",
       "      <td>-0.031576</td>\n",
       "      <td>-0.044264</td>\n",
       "      <td>0.027189</td>\n",
       "      <td>0.145513</td>\n",
       "      <td>-0.141793</td>\n",
       "      <td>-0.046828</td>\n",
       "      <td>0.046828</td>\n",
       "      <td>0.102423</td>\n",
       "      <td>0.058099</td>\n",
       "      <td>0.050200</td>\n",
       "      <td>...</td>\n",
       "      <td>0.024763</td>\n",
       "      <td>0.036907</td>\n",
       "      <td>-0.034516</td>\n",
       "      <td>0.165984</td>\n",
       "      <td>0.234192</td>\n",
       "      <td>0.004151</td>\n",
       "      <td>-0.006683</td>\n",
       "      <td>0.059383</td>\n",
       "      <td>0.083757</td>\n",
       "      <td>0.533723</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fireplaces</th>\n",
       "      <td>-0.066109</td>\n",
       "      <td>-0.076503</td>\n",
       "      <td>-0.079712</td>\n",
       "      <td>0.227465</td>\n",
       "      <td>-0.177844</td>\n",
       "      <td>0.005348</td>\n",
       "      <td>-0.005348</td>\n",
       "      <td>0.179039</td>\n",
       "      <td>0.044174</td>\n",
       "      <td>0.075641</td>\n",
       "      <td>...</td>\n",
       "      <td>0.001409</td>\n",
       "      <td>0.046357</td>\n",
       "      <td>-0.024096</td>\n",
       "      <td>0.200019</td>\n",
       "      <td>0.169405</td>\n",
       "      <td>-0.024822</td>\n",
       "      <td>0.011257</td>\n",
       "      <td>0.184530</td>\n",
       "      <td>0.095074</td>\n",
       "      <td>0.466929</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GarageYrBlt</th>\n",
       "      <td>-0.055396</td>\n",
       "      <td>0.064647</td>\n",
       "      <td>-0.092181</td>\n",
       "      <td>0.108132</td>\n",
       "      <td>-0.121596</td>\n",
       "      <td>-0.032469</td>\n",
       "      <td>0.032469</td>\n",
       "      <td>0.071214</td>\n",
       "      <td>0.045282</td>\n",
       "      <td>0.022533</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.006669</td>\n",
       "      <td>0.019151</td>\n",
       "      <td>-0.011134</td>\n",
       "      <td>0.117305</td>\n",
       "      <td>0.049877</td>\n",
       "      <td>-0.076822</td>\n",
       "      <td>0.029401</td>\n",
       "      <td>0.061416</td>\n",
       "      <td>0.015858</td>\n",
       "      <td>0.261366</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GarageCars</th>\n",
       "      <td>-0.051927</td>\n",
       "      <td>0.102851</td>\n",
       "      <td>-0.090477</td>\n",
       "      <td>0.175167</td>\n",
       "      <td>-0.221834</td>\n",
       "      <td>0.020025</td>\n",
       "      <td>-0.020025</td>\n",
       "      <td>0.161090</td>\n",
       "      <td>0.086285</td>\n",
       "      <td>0.037004</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.043080</td>\n",
       "      <td>0.040522</td>\n",
       "      <td>-0.039117</td>\n",
       "      <td>0.226342</td>\n",
       "      <td>0.213569</td>\n",
       "      <td>-0.151434</td>\n",
       "      <td>0.035765</td>\n",
       "      <td>0.050494</td>\n",
       "      <td>0.020934</td>\n",
       "      <td>0.640409</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GarageArea</th>\n",
       "      <td>-0.016778</td>\n",
       "      <td>0.114859</td>\n",
       "      <td>-0.073188</td>\n",
       "      <td>0.169593</td>\n",
       "      <td>-0.235580</td>\n",
       "      <td>0.047794</td>\n",
       "      <td>-0.047794</td>\n",
       "      <td>0.142028</td>\n",
       "      <td>0.065075</td>\n",
       "      <td>0.050986</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.027400</td>\n",
       "      <td>0.027974</td>\n",
       "      <td>-0.027378</td>\n",
       "      <td>0.224666</td>\n",
       "      <td>0.241435</td>\n",
       "      <td>-0.121777</td>\n",
       "      <td>0.035087</td>\n",
       "      <td>0.051412</td>\n",
       "      <td>0.061047</td>\n",
       "      <td>0.623431</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <td>-0.055969</td>\n",
       "      <td>-0.063687</td>\n",
       "      <td>-0.022364</td>\n",
       "      <td>0.167734</td>\n",
       "      <td>-0.135901</td>\n",
       "      <td>0.017990</td>\n",
       "      <td>-0.017990</td>\n",
       "      <td>0.151257</td>\n",
       "      <td>0.063166</td>\n",
       "      <td>0.008322</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.009551</td>\n",
       "      <td>0.021011</td>\n",
       "      <td>0.022270</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.058661</td>\n",
       "      <td>-0.125989</td>\n",
       "      <td>-0.032771</td>\n",
       "      <td>-0.074181</td>\n",
       "      <td>0.073378</td>\n",
       "      <td>0.324413</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <td>0.082295</td>\n",
       "      <td>-0.077563</td>\n",
       "      <td>0.063286</td>\n",
       "      <td>-0.159896</td>\n",
       "      <td>0.190614</td>\n",
       "      <td>-0.023082</td>\n",
       "      <td>0.023082</td>\n",
       "      <td>-0.063458</td>\n",
       "      <td>-0.054768</td>\n",
       "      <td>-0.029840</td>\n",
       "      <td>...</td>\n",
       "      <td>0.018361</td>\n",
       "      <td>-0.028887</td>\n",
       "      <td>-0.009916</td>\n",
       "      <td>-0.125989</td>\n",
       "      <td>-0.093079</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.037305</td>\n",
       "      <td>-0.082864</td>\n",
       "      <td>0.054203</td>\n",
       "      <td>-0.128578</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MiscVal</th>\n",
       "      <td>0.002999</td>\n",
       "      <td>-0.018928</td>\n",
       "      <td>-0.009230</td>\n",
       "      <td>0.016581</td>\n",
       "      <td>-0.006047</td>\n",
       "      <td>0.022733</td>\n",
       "      <td>-0.022733</td>\n",
       "      <td>0.043950</td>\n",
       "      <td>-0.006713</td>\n",
       "      <td>-0.007282</td>\n",
       "      <td>...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.006495</td>\n",
       "      <td>0.004906</td>\n",
       "      <td>-0.009551</td>\n",
       "      <td>-0.018584</td>\n",
       "      <td>0.018361</td>\n",
       "      <td>0.000354</td>\n",
       "      <td>0.031946</td>\n",
       "      <td>0.029669</td>\n",
       "      <td>-0.021190</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MoSold</th>\n",
       "      <td>0.042344</td>\n",
       "      <td>-0.003594</td>\n",
       "      <td>0.045883</td>\n",
       "      <td>-0.003429</td>\n",
       "      <td>-0.017192</td>\n",
       "      <td>-0.003690</td>\n",
       "      <td>0.003690</td>\n",
       "      <td>0.032942</td>\n",
       "      <td>0.002763</td>\n",
       "      <td>-0.003746</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.006495</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.145721</td>\n",
       "      <td>0.021011</td>\n",
       "      <td>0.071255</td>\n",
       "      <td>-0.028887</td>\n",
       "      <td>0.029474</td>\n",
       "      <td>0.023217</td>\n",
       "      <td>-0.033737</td>\n",
       "      <td>0.046432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>YrSold</th>\n",
       "      <td>0.030290</td>\n",
       "      <td>0.004943</td>\n",
       "      <td>-0.025035</td>\n",
       "      <td>0.012716</td>\n",
       "      <td>-0.017131</td>\n",
       "      <td>0.025043</td>\n",
       "      <td>-0.025043</td>\n",
       "      <td>-0.035973</td>\n",
       "      <td>0.004853</td>\n",
       "      <td>-0.026006</td>\n",
       "      <td>...</td>\n",
       "      <td>0.004906</td>\n",
       "      <td>-0.145721</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.022270</td>\n",
       "      <td>-0.057619</td>\n",
       "      <td>-0.009916</td>\n",
       "      <td>0.018645</td>\n",
       "      <td>0.010694</td>\n",
       "      <td>-0.059689</td>\n",
       "      <td>-0.028923</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <td>-0.055969</td>\n",
       "      <td>-0.063687</td>\n",
       "      <td>-0.022364</td>\n",
       "      <td>0.167734</td>\n",
       "      <td>-0.135901</td>\n",
       "      <td>0.017990</td>\n",
       "      <td>-0.017990</td>\n",
       "      <td>0.151257</td>\n",
       "      <td>0.063166</td>\n",
       "      <td>0.008322</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.009551</td>\n",
       "      <td>0.021011</td>\n",
       "      <td>0.022270</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.058661</td>\n",
       "      <td>-0.125989</td>\n",
       "      <td>-0.032771</td>\n",
       "      <td>-0.074181</td>\n",
       "      <td>0.073378</td>\n",
       "      <td>0.324413</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>OpenPorchSF</th>\n",
       "      <td>0.022243</td>\n",
       "      <td>0.185169</td>\n",
       "      <td>-0.029259</td>\n",
       "      <td>-0.044253</td>\n",
       "      <td>-0.053039</td>\n",
       "      <td>0.005664</td>\n",
       "      <td>-0.005664</td>\n",
       "      <td>0.059189</td>\n",
       "      <td>0.062904</td>\n",
       "      <td>0.022493</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.018584</td>\n",
       "      <td>0.071255</td>\n",
       "      <td>-0.057619</td>\n",
       "      <td>0.058661</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.093079</td>\n",
       "      <td>-0.005842</td>\n",
       "      <td>0.074304</td>\n",
       "      <td>0.060762</td>\n",
       "      <td>0.315856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <td>0.082295</td>\n",
       "      <td>-0.077563</td>\n",
       "      <td>0.063286</td>\n",
       "      <td>-0.159896</td>\n",
       "      <td>0.190614</td>\n",
       "      <td>-0.023082</td>\n",
       "      <td>0.023082</td>\n",
       "      <td>-0.063458</td>\n",
       "      <td>-0.054768</td>\n",
       "      <td>-0.029840</td>\n",
       "      <td>...</td>\n",
       "      <td>0.018361</td>\n",
       "      <td>-0.028887</td>\n",
       "      <td>-0.009916</td>\n",
       "      <td>-0.125989</td>\n",
       "      <td>-0.093079</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.037305</td>\n",
       "      <td>-0.082864</td>\n",
       "      <td>0.054203</td>\n",
       "      <td>-0.128578</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3SsnPorch</th>\n",
       "      <td>-0.009661</td>\n",
       "      <td>-0.025113</td>\n",
       "      <td>-0.012246</td>\n",
       "      <td>0.051525</td>\n",
       "      <td>-0.038708</td>\n",
       "      <td>-0.007473</td>\n",
       "      <td>0.007473</td>\n",
       "      <td>0.031960</td>\n",
       "      <td>0.021249</td>\n",
       "      <td>-0.009661</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000354</td>\n",
       "      <td>0.029474</td>\n",
       "      <td>0.018645</td>\n",
       "      <td>-0.032771</td>\n",
       "      <td>-0.005842</td>\n",
       "      <td>-0.037305</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.031436</td>\n",
       "      <td>-0.007992</td>\n",
       "      <td>0.044584</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ScreenPorch</th>\n",
       "      <td>-0.007689</td>\n",
       "      <td>-0.046530</td>\n",
       "      <td>-0.028443</td>\n",
       "      <td>0.061666</td>\n",
       "      <td>-0.033662</td>\n",
       "      <td>0.033160</td>\n",
       "      <td>-0.033160</td>\n",
       "      <td>0.038985</td>\n",
       "      <td>0.059691</td>\n",
       "      <td>-0.000538</td>\n",
       "      <td>...</td>\n",
       "      <td>0.031946</td>\n",
       "      <td>0.023217</td>\n",
       "      <td>0.010694</td>\n",
       "      <td>-0.074181</td>\n",
       "      <td>0.074304</td>\n",
       "      <td>-0.082864</td>\n",
       "      <td>-0.031436</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.051307</td>\n",
       "      <td>0.111447</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PoolArea</th>\n",
       "      <td>-0.005705</td>\n",
       "      <td>-0.014828</td>\n",
       "      <td>-0.007231</td>\n",
       "      <td>0.035591</td>\n",
       "      <td>-0.028779</td>\n",
       "      <td>-0.004413</td>\n",
       "      <td>0.004413</td>\n",
       "      <td>0.017269</td>\n",
       "      <td>-0.011676</td>\n",
       "      <td>0.093544</td>\n",
       "      <td>...</td>\n",
       "      <td>0.029669</td>\n",
       "      <td>-0.033737</td>\n",
       "      <td>-0.059689</td>\n",
       "      <td>0.073378</td>\n",
       "      <td>0.060762</td>\n",
       "      <td>0.054203</td>\n",
       "      <td>-0.007992</td>\n",
       "      <td>0.051307</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.092404</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SalePrice</th>\n",
       "      <td>-0.111257</td>\n",
       "      <td>0.089950</td>\n",
       "      <td>-0.065429</td>\n",
       "      <td>0.245063</td>\n",
       "      <td>-0.288065</td>\n",
       "      <td>-0.041036</td>\n",
       "      <td>0.041036</td>\n",
       "      <td>0.223284</td>\n",
       "      <td>0.126096</td>\n",
       "      <td>0.036720</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.021190</td>\n",
       "      <td>0.046432</td>\n",
       "      <td>-0.028923</td>\n",
       "      <td>0.324413</td>\n",
       "      <td>0.315856</td>\n",
       "      <td>-0.128578</td>\n",
       "      <td>0.044584</td>\n",
       "      <td>0.111447</td>\n",
       "      <td>0.092404</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>281 rows × 281 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                      MSZoning_C (all)  MSZoning_FV  MSZoning_RH  MSZoning_RL  \\\n",
       "MSZoning_C (all)              1.000000    -0.017926    -0.008742    -0.160278   \n",
       "MSZoning_FV                  -0.017926     1.000000    -0.022722    -0.416608   \n",
       "MSZoning_RH                  -0.008742    -0.022722     1.000000    -0.203158   \n",
       "MSZoning_RL                  -0.160278    -0.416608    -0.203158     1.000000   \n",
       "MSZoning_RM                  -0.034792    -0.090435    -0.044101    -0.808585   \n",
       "Street_Grvl                   0.254287    -0.013866    -0.006762    -0.045348   \n",
       "Street_Pave                  -0.254287     0.013866     0.006762     0.045348   \n",
       "LotShape_IR1                 -0.040840    -0.081464    -0.046176     0.261574   \n",
       "LotShape_IR2                 -0.014116     0.023612     0.021930     0.027175   \n",
       "LotShape_IR3                 -0.006897    -0.017926    -0.008742     0.022698   \n",
       "LotShape_Reg                  0.045922     0.074564     0.039092    -0.268764   \n",
       "LandContour_Bnk               0.023234    -0.045840     0.107156    -0.063265   \n",
       "LandContour_HLS               0.030026    -0.040649     0.052529     0.023808   \n",
       "LandContour_Low               0.093897    -0.034321    -0.016737     0.060758   \n",
       "LandContour_Lvl              -0.081736     0.072772    -0.094910    -0.002963   \n",
       "LotConfig_Corner              0.004292    -0.040692    -0.015102     0.029069   \n",
       "LotConfig_CulDSac            -0.021785    -0.043094    -0.027613     0.129087   \n",
       "LotConfig_FR2                -0.015146     0.017075    -0.019198     0.018499   \n",
       "LotConfig_FR3                -0.004353     0.052219    -0.005517    -0.069080   \n",
       "LotConfig_Inside              0.014704     0.045621     0.036231    -0.094730   \n",
       "LandSlope_Gtl                -0.091058     0.051282    -0.004248    -0.041072   \n",
       "LandSlope_Mod                 0.102868    -0.046595     0.009176     0.022413   \n",
       "LandSlope_Sev                -0.007871    -0.020460    -0.009977     0.049111   \n",
       "Neighborhood_Blmngtn         -0.009014    -0.023429    -0.011425     0.040608   \n",
       "Neighborhood_Blueste         -0.003076    -0.007995    -0.003899    -0.071482   \n",
       "Neighborhood_BrDale          -0.008742    -0.022722    -0.011080    -0.203158   \n",
       "Neighborhood_BrkSide         -0.016891    -0.043905    -0.021410    -0.152169   \n",
       "Neighborhood_ClearCr         -0.011612    -0.030184    -0.014719     0.072452   \n",
       "Neighborhood_CollgCr         -0.028101    -0.073043    -0.035619     0.120101   \n",
       "Neighborhood_Crawfor         -0.015800    -0.041068     0.051637     0.052913   \n",
       "...                                ...          ...          ...          ...   \n",
       "BsmtFinSF2                   -0.023971    -0.062308    -0.024714     0.082900   \n",
       "BsmtUnfSF                    -0.003693     0.046856    -0.014519     0.011716   \n",
       "TotalBsmtSF                  -0.054352    -0.032689    -0.055128     0.257373   \n",
       "1stFlrSF                     -0.066880    -0.095486    -0.039343     0.304731   \n",
       "2ndFlrSF                     -0.011093     0.114848     0.027199    -0.099247   \n",
       "LowQualFinSF                  0.077662    -0.009558     0.057049    -0.095146   \n",
       "GrLivArea                    -0.051232     0.024275    -0.001070     0.132936   \n",
       "BsmtFullBath                 -0.052085    -0.042555    -0.022898     0.146855   \n",
       "BsmtHalfBath                  0.014776    -0.052035    -0.025375     0.068697   \n",
       "FullBath                     -0.085208     0.170472    -0.012437     0.123634   \n",
       "HalfBath                     -0.046730     0.146078    -0.067084     0.057734   \n",
       "BedroomAbvGr                 -0.057683    -0.066453     0.065644     0.139264   \n",
       "KitchenAbvGr                  0.020143    -0.045644     0.127085    -0.088371   \n",
       "TotRmsAbvGrd                 -0.031576    -0.044264     0.027189     0.145513   \n",
       "Fireplaces                   -0.066109    -0.076503    -0.079712     0.227465   \n",
       "GarageYrBlt                  -0.055396     0.064647    -0.092181     0.108132   \n",
       "GarageCars                   -0.051927     0.102851    -0.090477     0.175167   \n",
       "GarageArea                   -0.016778     0.114859    -0.073188     0.169593   \n",
       "WoodDeckSF                   -0.055969    -0.063687    -0.022364     0.167734   \n",
       "EnclosedPorch                 0.082295    -0.077563     0.063286    -0.159896   \n",
       "MiscVal                       0.002999    -0.018928    -0.009230     0.016581   \n",
       "MoSold                        0.042344    -0.003594     0.045883    -0.003429   \n",
       "YrSold                        0.030290     0.004943    -0.025035     0.012716   \n",
       "WoodDeckSF                   -0.055969    -0.063687    -0.022364     0.167734   \n",
       "OpenPorchSF                   0.022243     0.185169    -0.029259    -0.044253   \n",
       "EnclosedPorch                 0.082295    -0.077563     0.063286    -0.159896   \n",
       "3SsnPorch                    -0.009661    -0.025113    -0.012246     0.051525   \n",
       "ScreenPorch                  -0.007689    -0.046530    -0.028443     0.061666   \n",
       "PoolArea                     -0.005705    -0.014828    -0.007231     0.035591   \n",
       "SalePrice                    -0.111257     0.089950    -0.065429     0.245063   \n",
       "\n",
       "                      MSZoning_RM  Street_Grvl  Street_Pave  LotShape_IR1  \\\n",
       "MSZoning_C (all)        -0.034792     0.254287    -0.254287     -0.040840   \n",
       "MSZoning_FV             -0.090435    -0.013866     0.013866     -0.081464   \n",
       "MSZoning_RH             -0.044101    -0.006762     0.006762     -0.046176   \n",
       "MSZoning_RL             -0.808585    -0.045348     0.045348      0.261574   \n",
       "MSZoning_RM              1.000000     0.003127    -0.003127     -0.229711   \n",
       "Street_Grvl              0.003127     1.000000    -1.000000     -0.022494   \n",
       "Street_Pave             -0.003127    -1.000000     1.000000      0.022494   \n",
       "LotShape_IR1            -0.229711    -0.022494     0.022494      1.000000   \n",
       "LotShape_IR2            -0.047949     0.053886    -0.053886     -0.119701   \n",
       "LotShape_IR3            -0.011491    -0.005335     0.005335     -0.058481   \n",
       "LotShape_Reg             0.242838     0.004414    -0.004414     -0.925959   \n",
       "LandContour_Bnk          0.062357     0.091738    -0.091738     -0.013497   \n",
       "LandContour_HLS         -0.026057     0.046774    -0.046774      0.123403   \n",
       "LandContour_Low         -0.066614     0.058824    -0.058824      0.047527   \n",
       "LandContour_Lvl          0.007923    -0.119812     0.119812     -0.089423   \n",
       "LotConfig_Corner        -0.006350     0.025608    -0.025608      0.075015   \n",
       "LotConfig_CulDSac       -0.109902    -0.016851     0.016851      0.271735   \n",
       "LotConfig_FR2           -0.021970    -0.011716     0.011716     -0.004788   \n",
       "LotConfig_FR3            0.051574    -0.003367     0.003367     -0.009075   \n",
       "LotConfig_Inside         0.068184    -0.007713     0.007713     -0.209930   \n",
       "LandSlope_Gtl            0.039710    -0.175177     0.175177     -0.065622   \n",
       "LandSlope_Mod           -0.025210     0.141864    -0.141864      0.052570   \n",
       "LandSlope_Sev           -0.039710     0.107881    -0.107881      0.041669   \n",
       "Neighborhood_Blmngtn    -0.027559    -0.006972     0.006972     -0.076434   \n",
       "Neighborhood_Blueste     0.088403    -0.002379     0.002379     -0.026082   \n",
       "Neighborhood_BrDale      0.251252    -0.006762     0.006762     -0.074127   \n",
       "Neighborhood_BrkSide     0.209974    -0.013066     0.013066     -0.031491   \n",
       "Neighborhood_ClearCr    -0.058583    -0.008983     0.008983      0.039440   \n",
       "Neighborhood_CollgCr    -0.078471    -0.021737     0.021737      0.015689   \n",
       "Neighborhood_Crawfor    -0.048306    -0.012221     0.012221      0.064133   \n",
       "...                           ...          ...          ...           ...   \n",
       "BsmtFinSF2              -0.046188     0.038487    -0.038487      0.025300   \n",
       "BsmtUnfSF               -0.035448    -0.035229     0.035229      0.021775   \n",
       "TotalBsmtSF             -0.247379    -0.005068     0.005068      0.160590   \n",
       "1stFlrSF                -0.267029    -0.005950     0.005950      0.157330   \n",
       "2ndFlrSF                 0.041907    -0.046983     0.046983      0.040629   \n",
       "LowQualFinSF             0.079942    -0.007724     0.007724     -0.027681   \n",
       "GrLivArea               -0.154239    -0.044121     0.044121      0.146935   \n",
       "BsmtFullBath            -0.124944     0.050524    -0.050524      0.078912   \n",
       "BsmtHalfBath            -0.044629    -0.015485     0.015485      0.007031   \n",
       "FullBath                -0.217000    -0.046471     0.046471      0.133434   \n",
       "HalfBath                -0.120295    -0.027628     0.027628      0.097500   \n",
       "BedroomAbvGr            -0.126983    -0.028865     0.028865      0.042184   \n",
       "KitchenAbvGr             0.085912    -0.013583     0.013583     -0.082850   \n",
       "TotRmsAbvGrd            -0.141793    -0.046828     0.046828      0.102423   \n",
       "Fireplaces              -0.177844     0.005348    -0.005348      0.179039   \n",
       "GarageYrBlt             -0.121596    -0.032469     0.032469      0.071214   \n",
       "GarageCars              -0.221834     0.020025    -0.020025      0.161090   \n",
       "GarageArea              -0.235580     0.047794    -0.047794      0.142028   \n",
       "WoodDeckSF              -0.135901     0.017990    -0.017990      0.151257   \n",
       "EnclosedPorch            0.190614    -0.023082     0.023082     -0.063458   \n",
       "MiscVal                 -0.006047     0.022733    -0.022733      0.043950   \n",
       "MoSold                  -0.017192    -0.003690     0.003690      0.032942   \n",
       "YrSold                  -0.017131     0.025043    -0.025043     -0.035973   \n",
       "WoodDeckSF              -0.135901     0.017990    -0.017990      0.151257   \n",
       "OpenPorchSF             -0.053039     0.005664    -0.005664      0.059189   \n",
       "EnclosedPorch            0.190614    -0.023082     0.023082     -0.063458   \n",
       "3SsnPorch               -0.038708    -0.007473     0.007473      0.031960   \n",
       "ScreenPorch             -0.033662     0.033160    -0.033160      0.038985   \n",
       "PoolArea                -0.028779    -0.004413     0.004413      0.017269   \n",
       "SalePrice               -0.288065    -0.041036     0.041036      0.223284   \n",
       "\n",
       "                      LotShape_IR2  LotShape_IR3    ...       MiscVal  \\\n",
       "MSZoning_C (all)         -0.014116     -0.006897    ...      0.002999   \n",
       "MSZoning_FV               0.023612     -0.017926    ...     -0.018928   \n",
       "MSZoning_RH               0.021930     -0.008742    ...     -0.009230   \n",
       "MSZoning_RL               0.027175      0.022698    ...      0.016581   \n",
       "MSZoning_RM              -0.047949     -0.011491    ...     -0.006047   \n",
       "Street_Grvl               0.053886     -0.005335    ...      0.022733   \n",
       "Street_Pave              -0.053886      0.005335    ...     -0.022733   \n",
       "LotShape_IR1             -0.119701     -0.058481    ...      0.043950   \n",
       "LotShape_IR2              1.000000     -0.014116    ...     -0.006713   \n",
       "LotShape_IR3             -0.014116      1.000000    ...     -0.007282   \n",
       "LotShape_Reg             -0.223509     -0.109197    ...     -0.039392   \n",
       "LandContour_Bnk           0.025113      0.064104    ...     -0.018254   \n",
       "LandContour_HLS           0.059178      0.030026    ...     -0.008159   \n",
       "LandContour_Low           0.106643      0.093897    ...     -0.004503   \n",
       "LandContour_Lvl          -0.107040     -0.109169    ...      0.019461   \n",
       "LotConfig_Corner          0.006628      0.004292    ...     -0.012425   \n",
       "LotConfig_CulDSac         0.191897      0.045887    ...      0.070967   \n",
       "LotConfig_FR2             0.086440     -0.015146    ...     -0.008560   \n",
       "LotConfig_FR3            -0.008909     -0.004353    ...     -0.004596   \n",
       "LotConfig_Inside         -0.143599     -0.022310    ...     -0.024272   \n",
       "LandSlope_Gtl            -0.107106     -0.017200    ...      0.008218   \n",
       "LandSlope_Mod             0.063815     -0.017926    ...     -0.013210   \n",
       "LandSlope_Sev             0.116288      0.080531    ...      0.009330   \n",
       "Neighborhood_Blmngtn     -0.018450     -0.009014    ...     -0.009518   \n",
       "Neighborhood_Blueste     -0.006296     -0.003076    ...     -0.003248   \n",
       "Neighborhood_BrDale      -0.017893     -0.008742    ...     -0.009230   \n",
       "Neighborhood_BrkSide     -0.034573     -0.016891    ...     -0.003199   \n",
       "Neighborhood_ClearCr      0.127375     -0.011612    ...     -0.003199   \n",
       "Neighborhood_CollgCr      0.079030     -0.000749    ...     -0.018528   \n",
       "Neighborhood_Crawfor     -0.032339     -0.015800    ...      0.002122   \n",
       "...                            ...           ...    ...           ...   \n",
       "BsmtFinSF2                0.056726      0.018256    ...      0.004940   \n",
       "BsmtUnfSF                 0.001972     -0.010705    ...     -0.023837   \n",
       "TotalBsmtSF               0.032344      0.122890    ...     -0.018479   \n",
       "1stFlrSF                  0.040544      0.091752    ...     -0.021096   \n",
       "2ndFlrSF                  0.074735      0.033172    ...      0.016197   \n",
       "LowQualFinSF              0.032871     -0.009986    ...     -0.003793   \n",
       "GrLivArea                 0.094953      0.094133    ...     -0.002416   \n",
       "BsmtFullBath             -0.019494      0.027961    ...     -0.023047   \n",
       "BsmtHalfBath              0.080619      0.014776    ...     -0.007367   \n",
       "FullBath                  0.096601      0.050505    ...     -0.014290   \n",
       "HalfBath                  0.051973      0.019348    ...      0.001290   \n",
       "BedroomAbvGr              0.027839      0.023785    ...      0.007767   \n",
       "KitchenAbvGr             -0.035943     -0.017560    ...      0.062341   \n",
       "TotRmsAbvGrd              0.058099      0.050200    ...      0.024763   \n",
       "Fireplaces                0.044174      0.075641    ...      0.001409   \n",
       "GarageYrBlt               0.045282      0.022533    ...     -0.006669   \n",
       "GarageCars                0.086285      0.037004    ...     -0.043080   \n",
       "GarageArea                0.065075      0.050986    ...     -0.027400   \n",
       "WoodDeckSF                0.063166      0.008322    ...     -0.009551   \n",
       "EnclosedPorch            -0.054768     -0.029840    ...      0.018361   \n",
       "MiscVal                  -0.006713     -0.007282    ...      1.000000   \n",
       "MoSold                    0.002763     -0.003746    ...     -0.006495   \n",
       "YrSold                    0.004853     -0.026006    ...      0.004906   \n",
       "WoodDeckSF                0.063166      0.008322    ...     -0.009551   \n",
       "OpenPorchSF               0.062904      0.022493    ...     -0.018584   \n",
       "EnclosedPorch            -0.054768     -0.029840    ...      0.018361   \n",
       "3SsnPorch                 0.021249     -0.009661    ...      0.000354   \n",
       "ScreenPorch               0.059691     -0.000538    ...      0.031946   \n",
       "PoolArea                 -0.011676      0.093544    ...      0.029669   \n",
       "SalePrice                 0.126096      0.036720    ...     -0.021190   \n",
       "\n",
       "                        MoSold    YrSold  WoodDeckSF  OpenPorchSF  \\\n",
       "MSZoning_C (all)      0.042344  0.030290   -0.055969     0.022243   \n",
       "MSZoning_FV          -0.003594  0.004943   -0.063687     0.185169   \n",
       "MSZoning_RH           0.045883 -0.025035   -0.022364    -0.029259   \n",
       "MSZoning_RL          -0.003429  0.012716    0.167734    -0.044253   \n",
       "MSZoning_RM          -0.017192 -0.017131   -0.135901    -0.053039   \n",
       "Street_Grvl          -0.003690  0.025043    0.017990     0.005664   \n",
       "Street_Pave           0.003690 -0.025043   -0.017990    -0.005664   \n",
       "LotShape_IR1          0.032942 -0.035973    0.151257     0.059189   \n",
       "LotShape_IR2          0.002763  0.004853    0.063166     0.062904   \n",
       "LotShape_IR3         -0.003746 -0.026006    0.008322     0.022493   \n",
       "LotShape_Reg         -0.032491  0.037933   -0.170862    -0.083247   \n",
       "LandContour_Bnk      -0.036519 -0.008613   -0.051234    -0.020540   \n",
       "LandContour_HLS       0.070935 -0.019255    0.051634    -0.042875   \n",
       "LandContour_Low       0.030087 -0.014528    0.093419    -0.004252   \n",
       "LandContour_Lvl      -0.033515  0.024792   -0.044487     0.041723   \n",
       "LotConfig_Corner     -0.010989 -0.002072   -0.004585     0.034937   \n",
       "LotConfig_CulDSac    -0.009562  0.009079    0.085105     0.030207   \n",
       "LotConfig_FR2        -0.018852  0.022387    0.006055     0.038080   \n",
       "LotConfig_FR3        -0.001395 -0.032205    0.000944    -0.015360   \n",
       "LotConfig_Inside      0.022219 -0.008246   -0.045114    -0.059633   \n",
       "LandSlope_Gtl        -0.004384  0.010619   -0.092663     0.027063   \n",
       "LandSlope_Mod         0.000093 -0.020071    0.074666    -0.015339   \n",
       "LandSlope_Sev         0.010292  0.018646    0.057890    -0.031107   \n",
       "Neighborhood_Blmngtn -0.024740 -0.028219    0.045955    -0.051016   \n",
       "Neighborhood_Blueste -0.004411  0.019088    0.018107    -0.026092   \n",
       "Neighborhood_BrDale  -0.019841 -0.010169   -0.021838    -0.061442   \n",
       "Neighborhood_BrkSide -0.008656 -0.021960   -0.094801    -0.065457   \n",
       "Neighborhood_ClearCr  0.023996 -0.003164    0.105549     0.038342   \n",
       "Neighborhood_CollgCr -0.022777 -0.002316    0.054217     0.025850   \n",
       "Neighborhood_Crawfor  0.038071 -0.046653   -0.063282    -0.056473   \n",
       "...                        ...       ...         ...          ...   \n",
       "BsmtFinSF2           -0.015211  0.031706    0.067898     0.003093   \n",
       "BsmtUnfSF             0.034888 -0.041258   -0.005316     0.129005   \n",
       "TotalBsmtSF           0.013196 -0.014969    0.232019     0.247264   \n",
       "1stFlrSF              0.031372 -0.013604    0.235459     0.211671   \n",
       "2ndFlrSF              0.035164 -0.028700    0.092165     0.208026   \n",
       "LowQualFinSF         -0.022174 -0.028921   -0.025444     0.018251   \n",
       "GrLivArea             0.050240 -0.036526    0.247433     0.330224   \n",
       "BsmtFullBath         -0.025361  0.067049    0.175315     0.067341   \n",
       "BsmtHalfBath          0.032873 -0.046524    0.040161    -0.025324   \n",
       "FullBath              0.055872 -0.019669    0.187703     0.259977   \n",
       "HalfBath             -0.009050 -0.010269    0.108080     0.199740   \n",
       "BedroomAbvGr          0.046544 -0.036014    0.046854     0.093810   \n",
       "KitchenAbvGr          0.026589  0.031687   -0.090130    -0.070091   \n",
       "TotRmsAbvGrd          0.036907 -0.034516    0.165984     0.234192   \n",
       "Fireplaces            0.046357 -0.024096    0.200019     0.169405   \n",
       "GarageYrBlt           0.019151 -0.011134    0.117305     0.049877   \n",
       "GarageCars            0.040522 -0.039117    0.226342     0.213569   \n",
       "GarageArea            0.027974 -0.027378    0.224666     0.241435   \n",
       "WoodDeckSF            0.021011  0.022270    1.000000     0.058661   \n",
       "EnclosedPorch        -0.028887 -0.009916   -0.125989    -0.093079   \n",
       "MiscVal              -0.006495  0.004906   -0.009551    -0.018584   \n",
       "MoSold                1.000000 -0.145721    0.021011     0.071255   \n",
       "YrSold               -0.145721  1.000000    0.022270    -0.057619   \n",
       "WoodDeckSF            0.021011  0.022270    1.000000     0.058661   \n",
       "OpenPorchSF           0.071255 -0.057619    0.058661     1.000000   \n",
       "EnclosedPorch        -0.028887 -0.009916   -0.125989    -0.093079   \n",
       "3SsnPorch             0.029474  0.018645   -0.032771    -0.005842   \n",
       "ScreenPorch           0.023217  0.010694   -0.074181     0.074304   \n",
       "PoolArea             -0.033737 -0.059689    0.073378     0.060762   \n",
       "SalePrice             0.046432 -0.028923    0.324413     0.315856   \n",
       "\n",
       "                      EnclosedPorch  3SsnPorch  ScreenPorch  PoolArea  \\\n",
       "MSZoning_C (all)           0.082295  -0.009661    -0.007689 -0.005705   \n",
       "MSZoning_FV               -0.077563  -0.025113    -0.046530 -0.014828   \n",
       "MSZoning_RH                0.063286  -0.012246    -0.028443 -0.007231   \n",
       "MSZoning_RL               -0.159896   0.051525     0.061666  0.035591   \n",
       "MSZoning_RM                0.190614  -0.038708    -0.033662 -0.028779   \n",
       "Street_Grvl               -0.023082  -0.007473     0.033160 -0.004413   \n",
       "Street_Pave                0.023082   0.007473    -0.033160  0.004413   \n",
       "LotShape_IR1              -0.063458   0.031960     0.038985  0.017269   \n",
       "LotShape_IR2              -0.054768   0.021249     0.059691 -0.011676   \n",
       "LotShape_IR3              -0.029840  -0.009661    -0.000538  0.093544   \n",
       "LotShape_Reg               0.085886  -0.036857    -0.058464 -0.028880   \n",
       "LandContour_Bnk            0.087880  -0.008144    -0.004586  0.025697   \n",
       "LandContour_HLS           -0.025070   0.040932    -0.015882 -0.012935   \n",
       "LandContour_Low           -0.018675   0.033645     0.037782 -0.010922   \n",
       "LandContour_Lvl           -0.034360  -0.036360    -0.006735 -0.003883   \n",
       "LotConfig_Corner           0.117239  -0.002355     0.003388  0.036450   \n",
       "LotConfig_CulDSac         -0.061236   0.052705     0.025147  0.033259   \n",
       "LotConfig_FR2             -0.059056   0.041277    -0.043711 -0.012528   \n",
       "LotConfig_FR3             -0.000819  -0.006098    -0.014163 -0.003600   \n",
       "LotConfig_Inside          -0.043587  -0.042337     0.002187 -0.044061   \n",
       "LandSlope_Gtl              0.004707  -0.001772    -0.060177  0.016319   \n",
       "LandSlope_Mod              0.001575  -0.007776     0.060297 -0.014828   \n",
       "LandSlope_Sev             -0.014726   0.021314     0.011669 -0.006511   \n",
       "Neighborhood_Blmngtn      -0.039001  -0.012628    -0.012834 -0.007456   \n",
       "Neighborhood_Blueste      -0.013308  -0.004309    -0.010008 -0.002544   \n",
       "Neighborhood_BrDale       -0.037824  -0.012246    -0.028443 -0.007231   \n",
       "Neighborhood_BrkSide       0.059558  -0.006432     0.021295 -0.013972   \n",
       "Neighborhood_ClearCr       0.024218   0.005884     0.049842 -0.009605   \n",
       "Neighborhood_CollgCr      -0.120334  -0.009425    -0.065329 -0.023244   \n",
       "Neighborhood_Crawfor       0.075425   0.048001     0.051594 -0.013069   \n",
       "...                             ...        ...          ...       ...   \n",
       "BsmtFinSF2                 0.036543  -0.029993     0.088871  0.041709   \n",
       "BsmtUnfSF                 -0.002538   0.020764    -0.012579 -0.035092   \n",
       "TotalBsmtSF               -0.095478   0.037384     0.084489  0.126053   \n",
       "1stFlrSF                  -0.065292   0.056104     0.088758  0.131525   \n",
       "2ndFlrSF                   0.061989  -0.024358     0.040606  0.081487   \n",
       "LowQualFinSF               0.061081  -0.004296     0.026799  0.062157   \n",
       "GrLivArea                  0.009113   0.020643     0.101510  0.170205   \n",
       "BsmtFullBath              -0.049911  -0.000106     0.023148  0.067616   \n",
       "BsmtHalfBath              -0.008555   0.035114     0.032121  0.020025   \n",
       "FullBath                  -0.115093   0.035353    -0.008106  0.049604   \n",
       "HalfBath                  -0.095317  -0.004972     0.072426  0.022381   \n",
       "BedroomAbvGr               0.041570  -0.024478     0.044300  0.070703   \n",
       "KitchenAbvGr               0.037312  -0.024600    -0.051613 -0.014525   \n",
       "TotRmsAbvGrd               0.004151  -0.006683     0.059383  0.083757   \n",
       "Fireplaces                -0.024822   0.011257     0.184530  0.095074   \n",
       "GarageYrBlt               -0.076822   0.029401     0.061416  0.015858   \n",
       "GarageCars                -0.151434   0.035765     0.050494  0.020934   \n",
       "GarageArea                -0.121777   0.035087     0.051412  0.061047   \n",
       "WoodDeckSF                -0.125989  -0.032771    -0.074181  0.073378   \n",
       "EnclosedPorch              1.000000  -0.037305    -0.082864  0.054203   \n",
       "MiscVal                    0.018361   0.000354     0.031946  0.029669   \n",
       "MoSold                    -0.028887   0.029474     0.023217 -0.033737   \n",
       "YrSold                    -0.009916   0.018645     0.010694 -0.059689   \n",
       "WoodDeckSF                -0.125989  -0.032771    -0.074181  0.073378   \n",
       "OpenPorchSF               -0.093079  -0.005842     0.074304  0.060762   \n",
       "EnclosedPorch              1.000000  -0.037305    -0.082864  0.054203   \n",
       "3SsnPorch                 -0.037305   1.000000    -0.031436 -0.007992   \n",
       "ScreenPorch               -0.082864  -0.031436     1.000000  0.051307   \n",
       "PoolArea                   0.054203  -0.007992     0.051307  1.000000   \n",
       "SalePrice                 -0.128578   0.044584     0.111447  0.092404   \n",
       "\n",
       "                      SalePrice  \n",
       "MSZoning_C (all)      -0.111257  \n",
       "MSZoning_FV            0.089950  \n",
       "MSZoning_RH           -0.065429  \n",
       "MSZoning_RL            0.245063  \n",
       "MSZoning_RM           -0.288065  \n",
       "Street_Grvl           -0.041036  \n",
       "Street_Pave            0.041036  \n",
       "LotShape_IR1           0.223284  \n",
       "LotShape_IR2           0.126096  \n",
       "LotShape_IR3           0.036720  \n",
       "LotShape_Reg          -0.267672  \n",
       "LandContour_Bnk       -0.101124  \n",
       "LandContour_HLS        0.120014  \n",
       "LandContour_Low        0.045528  \n",
       "LandContour_Lvl       -0.027545  \n",
       "LotConfig_Corner       0.004145  \n",
       "LotConfig_CulDSac      0.141818  \n",
       "LotConfig_FR2         -0.006859  \n",
       "LotConfig_FR3          0.018186  \n",
       "LotConfig_Inside      -0.080538  \n",
       "LandSlope_Gtl         -0.051116  \n",
       "LandSlope_Mod          0.042981  \n",
       "LandSlope_Sev          0.027998  \n",
       "Neighborhood_Blmngtn   0.019066  \n",
       "Neighborhood_Blueste  -0.020250  \n",
       "Neighborhood_BrDale   -0.101303  \n",
       "Neighborhood_BrkSide  -0.143648  \n",
       "Neighborhood_ClearCr   0.055718  \n",
       "Neighborhood_CollgCr   0.072626  \n",
       "Neighborhood_Crawfor   0.071160  \n",
       "...                         ...  \n",
       "BsmtFinSF2            -0.011378  \n",
       "BsmtUnfSF              0.214479  \n",
       "TotalBsmtSF            0.613581  \n",
       "1stFlrSF               0.605852  \n",
       "2ndFlrSF               0.319334  \n",
       "LowQualFinSF          -0.025606  \n",
       "GrLivArea              0.708624  \n",
       "BsmtFullBath           0.227122  \n",
       "BsmtHalfBath          -0.016844  \n",
       "FullBath               0.560664  \n",
       "HalfBath               0.284108  \n",
       "BedroomAbvGr           0.168213  \n",
       "KitchenAbvGr          -0.135907  \n",
       "TotRmsAbvGrd           0.533723  \n",
       "Fireplaces             0.466929  \n",
       "GarageYrBlt            0.261366  \n",
       "GarageCars             0.640409  \n",
       "GarageArea             0.623431  \n",
       "WoodDeckSF             0.324413  \n",
       "EnclosedPorch         -0.128578  \n",
       "MiscVal               -0.021190  \n",
       "MoSold                 0.046432  \n",
       "YrSold                -0.028923  \n",
       "WoodDeckSF             0.324413  \n",
       "OpenPorchSF            0.315856  \n",
       "EnclosedPorch         -0.128578  \n",
       "3SsnPorch              0.044584  \n",
       "ScreenPorch            0.111447  \n",
       "PoolArea               0.092404  \n",
       "SalePrice              1.000000  \n",
       "\n",
       "[281 rows x 281 columns]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#计算相关矩阵  correlation matrix  \n",
    "\n",
    "train_data_corr = train_data.corr()  \n",
    "train_data_corr\n",
    "# 因特征过多，两两特征间热图绘制很难看出结果，故不绘制\n",
    "# plt.subplots(figsize = (50,50))  \n",
    "# sns.heatmap(train_data_corr,annot = True)\n",
    "# sns.heatmap(train_data_corr,vmax = 8, square = True, mask = train_data_corr < 1, cbar=False) \n",
    "\n",
    "# plt.savefig('Ames_coor.png' )\n",
    "# plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Street_Grvl and Street_Pave = -1.00\n",
      "CentralAir_N and CentralAir_Y = -1.00\n",
      "Utilities_AllPub and Utilities_NoSeWa = -1.00\n",
      "GarageType_No and GarageYrBlt = -1.00\n",
      "GarageFinish_No and GarageYrBlt = -1.00\n",
      "GarageQual_No and GarageYrBlt = -1.00\n",
      "GarageCond_No and GarageYrBlt = -1.00\n",
      "SaleType_New and SaleCondition_Partial = 0.99\n",
      "BsmtQual_No and BsmtFinType2_No = 0.99\n",
      "BsmtCond_No and BsmtFinType2_No = 0.99\n",
      "BsmtFinType1_No and BsmtFinType2_No = 0.99\n",
      "Exterior1st_VinylSd and Exterior2nd_VinylSd = 0.98\n",
      "Exterior1st_CemntBd and Exterior2nd_CmentBd = 0.97\n",
      "Exterior1st_MetalSd and Exterior2nd_MetalSd = 0.97\n",
      "RoofStyle_Gable and RoofStyle_Hip = -0.93\n",
      "LotShape_IR1 and LotShape_Reg = -0.93\n",
      "LandSlope_Gtl and LandSlope_Mod = -0.91\n",
      "ExterQual_Gd and ExterQual_TA = -0.91\n",
      "ExterCond_Gd and ExterCond_TA = -0.89\n",
      "Exterior1st_HdBoard and Exterior2nd_HdBoard = 0.88\n",
      "GarageCars and GarageArea = 0.88\n",
      "MSZoning_FV and Neighborhood_Somerst = 0.86\n",
      "Exterior1st_Wd Sdng and Exterior2nd_Wd Sdng = 0.86\n",
      "Electrical_FuseA and Electrical_SBrkr = -0.86\n",
      "PavedDrive_N and PavedDrive_Y = -0.86\n",
      "Exterior1st_AsbShng and Exterior2nd_AsbShng = 0.85\n",
      "RoofStyle_Flat and RoofMatl_Tar&Grv = 0.83\n",
      "GrLivArea and TotRmsAbvGrd = 0.83\n",
      "KitchenQual_Gd and KitchenQual_TA = -0.82\n",
      "TotalBsmtSF and 1stFlrSF = 0.82\n",
      "BldgType_1Fam and MSSubClass = -0.82\n",
      "GarageQual_Ex and GarageCond_Ex = 0.82\n",
      "HouseStyle_2Story and 2ndFlrSF = 0.81\n",
      "MSZoning_RL and MSZoning_RM = -0.81\n",
      "Foundation_Slab and BsmtQual_No = 0.80\n",
      "Foundation_Slab and BsmtCond_No = 0.80\n",
      "Foundation_Slab and BsmtFinType1_No = 0.80\n",
      "MasVnrType_BrkFace and MasVnrType_None = -0.80\n",
      "OverallQual and SalePrice = 0.79\n",
      "Foundation_Slab and BsmtFinType2_No = 0.79\n",
      "HouseStyle_1Story and 2ndFlrSF = -0.79\n",
      "GarageQual_TA and GarageCond_TA = 0.79\n",
      "Foundation_CBlock and Foundation_PConc = -0.78\n",
      "Exterior1st_Stucco and Exterior2nd_Stucco = 0.78\n",
      "SaleType_New and SaleType_WD = -0.77\n",
      "GarageCond_TA and GarageYrBlt = 0.77\n",
      "SaleType_WD and SaleCondition_Partial = -0.77\n",
      "BsmtQual_Gd and BsmtQual_TA = -0.77\n",
      "GarageType_No and GarageCond_TA = -0.76\n",
      "GarageFinish_No and GarageCond_TA = -0.76\n",
      "GarageQual_No and GarageCond_TA = -0.76\n",
      "GarageCond_No and GarageCond_TA = -0.76\n",
      "Exterior1st_Plywood and Exterior2nd_Plywood = 0.76\n",
      "LotConfig_Corner and LotConfig_Inside = -0.75\n",
      "Heating_GasA and Heating_GasW = -0.75\n",
      "GarageType_Attchd and GarageType_Detchd = -0.73\n",
      "GarageQual_TA and GarageYrBlt = 0.73\n",
      "GarageType_No and GarageQual_TA = -0.72\n",
      "GarageFinish_No and GarageQual_TA = -0.72\n",
      "GarageQual_No and GarageQual_TA = -0.72\n",
      "GarageQual_TA and GarageCond_No = -0.72\n",
      "BsmtFinType2_Unf and BsmtFinSF2 = -0.72\n",
      "GrLivArea and SalePrice = 0.71\n",
      "BsmtCond_Po and Electrical_Mix = 0.71\n",
      "Condition2_RRAe and RoofStyle_Shed = 0.71\n",
      "2ndFlrSF and GrLivArea = 0.69\n",
      "BldgType_Duplex and KitchenAbvGr = 0.68\n",
      "MasVnrType_None and MasVnrArea = -0.68\n",
      "BedroomAbvGr and TotRmsAbvGrd = 0.68\n",
      "Exterior1st_BrkFace and Exterior2nd_BrkFace = 0.67\n",
      "ExterQual_TA and KitchenQual_TA = 0.67\n",
      "HouseStyle_1Story and HouseStyle_2Story = -0.66\n",
      "BldgType_1Fam and BldgType_TwnhsE = -0.66\n",
      "SaleCondition_Normal and SaleCondition_Partial = -0.65\n",
      "HeatingQC_Ex and HeatingQC_TA = -0.65\n",
      "GarageQual_Po and GarageCond_Po = 0.65\n",
      "Foundation_PConc and YearBuilt = 0.65\n",
      "BsmtFinSF1 and BsmtFullBath = 0.65\n",
      "RoofStyle_Flat and RoofMatl_CompShg = -0.65\n",
      "RoofMatl_CompShg and RoofMatl_Tar&Grv = -0.65\n",
      "ExterQual_TA and OverallQual = -0.65\n",
      "SaleType_New and SaleCondition_Normal = -0.65\n",
      "GarageCars and SalePrice = 0.64\n",
      "BsmtCond_Gd and BsmtCond_TA = -0.64\n",
      "SaleType_WD and SaleCondition_Normal = 0.63\n",
      "BsmtQual_TA and YearBuilt = -0.63\n",
      "Condition2_Feedr and Condition2_Norm = -0.63\n",
      "GrLivArea and FullBath = 0.63\n",
      "LandContour_Bnk and LandContour_Lvl = -0.63\n",
      "BsmtFinType1_Unf and BsmtFinSF1 = -0.63\n",
      "ExterQual_Gd and KitchenQual_Gd = 0.63\n",
      "Neighborhood_NPkVill and Exterior2nd_Brk Cmn = 0.63\n",
      "GarageArea and SalePrice = 0.62\n",
      "HouseStyle_2Story and HalfBath = 0.62\n",
      "ExterQual_TA and Foundation_PConc = -0.62\n",
      "ExterQual_Gd and KitchenQual_TA = -0.62\n",
      "2ndFlrSF and TotRmsAbvGrd = 0.62\n",
      "BsmtExposure_Av and BsmtExposure_No = -0.61\n",
      "TotalBsmtSF and SalePrice = 0.61\n",
      "GarageType_Detchd and GarageFinish_Unf = 0.61\n",
      "2ndFlrSF and HalfBath = 0.61\n",
      "Condition1_Feedr and Condition1_Norm = -0.61\n",
      "1stFlrSF and SalePrice = 0.61\n",
      "Foundation_PConc and BsmtQual_TA = -0.60\n",
      "BsmtFinType1_Unf and BsmtUnfSF = 0.60\n",
      "OverallQual and GarageCars = 0.60\n",
      "GarageYrBlt and GarageCars = 0.60\n",
      "OverallQual and GrLivArea = 0.59\n",
      "YearBuilt and YearRemodAdd = 0.59\n",
      "HouseStyle_2.5Fin and LowQualFinSF = 0.59\n",
      "ExterQual_TA and YearBuilt = -0.59\n",
      "ExterQual_TA and SalePrice = -0.59\n",
      "ExterQual_Gd and Foundation_PConc = 0.59\n",
      "SaleCondition_Abnorml and SaleCondition_Normal = -0.58\n",
      "KitchenQual_TA and YearRemodAdd = -0.58\n",
      "Exterior1st_AsphShn and Exterior2nd_AsphShn = 0.58\n",
      "Condition2_PosA and ExterCond_Ex = 0.58\n",
      "Electrical_Mix and GarageQual_Po = 0.58\n",
      "GarageType_No and GarageCars = -0.57\n",
      "GarageFinish_No and GarageCars = -0.57\n",
      "GarageQual_No and GarageCars = -0.57\n",
      "GarageCond_No and GarageCars = -0.57\n",
      "OverallQual and YearBuilt = 0.57\n",
      "MasVnrType_BrkFace and MasVnrArea = 0.57\n",
      "Foundation_PConc and YearRemodAdd = 0.57\n",
      "Functional_Min2 and Functional_Typ = -0.57\n",
      "Foundation_PConc and OverallQual = 0.57\n",
      "1stFlrSF and GrLivArea = 0.57\n",
      "ExterQual_TA and YearRemodAdd = -0.57\n",
      "ExterQual_Ex and KitchenQual_Ex = 0.56\n",
      "Exterior1st_VinylSd and Foundation_PConc = 0.56\n",
      "OverallQual and GarageArea = 0.56\n",
      "MSZoning_RM and Neighborhood_OldTown = 0.56\n",
      "Exterior2nd_VinylSd and Foundation_PConc = 0.56\n",
      "GarageYrBlt and GarageArea = 0.56\n",
      "FullBath and SalePrice = 0.56\n",
      "BsmtQual_Gd and YearBuilt = 0.56\n",
      "LandContour_HLS and LandContour_Lvl = -0.56\n",
      "ExterQual_Gd and YearBuilt = 0.56\n",
      "ExterQual_TA and KitchenQual_Gd = -0.56\n",
      "FullBath and TotRmsAbvGrd = 0.55\n",
      "Foundation_BrkTil and YearBuilt = -0.55\n",
      "KitchenQual_TA and OverallQual = -0.55\n",
      "Foundation_PConc and KitchenQual_TA = -0.55\n",
      "BsmtQual_Ex and SalePrice = 0.55\n",
      "OverallQual and YearRemodAdd = 0.55\n",
      "OverallQual and FullBath = 0.55\n",
      "ExterQual_Gd and OverallQual = 0.55\n",
      "GarageQual_Fa and GarageQual_TA = -0.55\n",
      "ExterQual_TA and BsmtQual_TA = 0.54\n",
      "Functional_Min1 and Functional_Typ = -0.54\n",
      "LandSlope_Sev and LotArea = 0.54\n",
      "YearBuilt and GarageCars = 0.54\n",
      "OverallQual and TotalBsmtSF = 0.54\n",
      "GarageFinish_RFn and GarageFinish_Unf = -0.54\n",
      "GarageType_No and GarageArea = -0.54\n",
      "GarageFinish_No and GarageArea = -0.54\n",
      "GarageQual_No and GarageArea = -0.54\n",
      "GarageCond_No and GarageArea = -0.54\n",
      "TotRmsAbvGrd and SalePrice = 0.53\n",
      "LandContour_Lvl and LandSlope_Gtl = 0.53\n",
      "KitchenQual_Gd and YearRemodAdd = 0.53\n",
      "Exterior1st_BrkComm and Exterior2nd_Brk Cmn = 0.53\n",
      "ExterQual_TA and HeatingQC_Ex = -0.53\n",
      "ExterQual_Ex and BsmtQual_Ex = 0.53\n",
      "ExterQual_Gd and YearRemodAdd = 0.53\n",
      "Foundation_PConc and HeatingQC_Ex = 0.53\n",
      "Exterior1st_WdShing and Exterior2nd_Wd Shng = 0.53\n",
      "BsmtCond_Fa and BsmtCond_TA = -0.53\n",
      "BldgType_TwnhsE and MSSubClass = 0.52\n",
      "Neighborhood_MeadowV and Exterior2nd_CmentBd = 0.52\n",
      "GarageFinish_Unf and YearBuilt = -0.52\n",
      "YearBuilt and SalePrice = 0.52\n",
      "BsmtFinSF1 and TotalBsmtSF = 0.52\n",
      "GrLivArea and BedroomAbvGr = 0.52\n",
      "Neighborhood_MeadowV and Exterior1st_CemntBd = 0.52\n",
      "KitchenQual_TA and SalePrice = -0.52\n",
      "Exterior1st_VinylSd and YearBuilt = 0.52\n",
      "BsmtQual_Ex and KitchenQual_Ex = 0.52\n",
      "HeatingQC_Ex and YearRemodAdd = 0.52\n",
      "Exterior2nd_VinylSd and YearBuilt = 0.51\n",
      "ExterQual_Gd and BsmtQual_TA = -0.51\n",
      "Foundation_CBlock and BsmtQual_TA = 0.51\n",
      "GarageCond_TA and GarageCars = 0.51\n",
      "YearRemodAdd and SalePrice = 0.51\n",
      "KitchenQual_Ex and SalePrice = 0.50\n",
      "2ndFlrSF and BedroomAbvGr = 0.50\n",
      "ExterQual_Gd and BsmtQual_Gd = 0.50\n"
     ]
    }
   ],
   "source": [
    "#Set the threshold to select only highly correlated attributes\n",
    "threshold = 0.5\n",
    "# List of pairs along with correlation above threshold\n",
    "corr_list = []\n",
    "size = train_data_corr.shape[0]\n",
    "columns = train_data.columns\n",
    "\n",
    "#Search for the highly correlated pairs\n",
    "for i in range(0, size): #for 'size' features\n",
    "    for j in range(i+1,size): #avoid repetition\n",
    "        if (train_data_corr.iloc[i,j] >= threshold and train_data_corr.iloc[i,j] < 1) or (train_data_corr.iloc[i,j] < 0 and train_data_corr.iloc[i,j] <= -threshold):\n",
    "            corr_list.append([train_data_corr.iloc[i,j],i,j]) #store correlation and columns index\n",
    "\n",
    "#Sort to show higher ones first            \n",
    "s_corr_list = sorted(corr_list,key=lambda x: -abs(x[0]))\n",
    "\n",
    "#Print correlations and column names\n",
    "for v,i,j in s_corr_list:\n",
    "    print (\"%s and %s = %.2f\" % (columns[i],columns[j],v))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAm8AAAJJCAYAAAD8w9CjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3WeYFMX+9vFvzeZEWECC5DRkZEkGkGBEMOAxYQQBMwaCIqCAggIqRzkqoiCGo/IczCgiqIAEkSRRdpYsICB58+6Eel7MsIGgcpRe5n/uz3VxyXRXd99TzswWv6qeNdZaRERERCQ8uEo6gIiIiIj8eRq8iYiIiIQRDd5EREREwogGbyIiIiJhRIM3ERERkTCiwZuIiIhIGIks6QAiIiIif5Z3/xbHvuMsqnxt49S1ToUqbyIiIiJhRJU3ERERCR8Bf0knKHGqvImIiIiEEVXeREREJHzYQEknKHGqvImIiIiEEQ3eRERERMKIpk1FREQkfAQ0barKm4iIiEgYUeVNREREwobVDQuqvImIiIiEE1XeREREJHxozZsqbyIiIiLhRJU3ERERCR9a86bKm4iIiEg4UeVNREREwod+Mb0qbyIiIiLhRJU3ERERCR9a86bKm4iIiEg4UeVNREREwoe+502VNxEREZFwosqbiIiIhA39blNV3kRERETCigZvIiIiImFE06YiIiISPnTDgipvIiIiIuFElTcREREJH7phQZU3ERERkXCiypuIiIiED/1ielXeRERERMKJKm8iIiISPrTmTZU3ERERkXCiypuIiIiED33PmypvIiIiIuFElTcREREJH1rzpsqbiIiISDhR5U1ERETCh9a8qfImIiIiEk5UeRMREZGwYa1+w4IqbyIiIiJhRIM3ERERkTCiaVMREREJH/qqEFXeRERERMKJKm8iIiISPvRVIaq8iYiIiIQTVd5EREQkfGjNmypvIiIiIuFElTcREREJHwF9Sa8Gb38j7/4ttqQznIr8lwaXdIRTlrN8b0lHOGW/pSWWdIRTkpsffh8LXn9ESUc4Zb5AeE187DYxJR3hlHlNSSc4ddmu8Avde+e/wy90mAu/T2kRERH536U1b1rzJiIiIhJOVHkTERGR8KHveVPlTURERCScqPImIiIi4UNr3lR5ExEREQknqryJiIhI+NCaN1XeRERERMKJBm8iIiIiYUTTpiIiIhI+NG2qypuIiIhIOFHlTURERMKGtfrF9Kq8iYiIiIQRVd5EREQkfGjNmypvIiIiIuFElTcREREJH/r1WKq8iYiIiIQTVd5EREQkfGjNmwZvZ4o161MZP/FN3np5XLHt8xYuYeLU94mMiKB7t0u57qou5OblMXjkcxw8dJiE+DhGDxtActkyzoU1huhufXBVqgF+L3mfvoY9uBcAV6UaRF/Rs6Cpq2o98t5/jsD+X4n5x/2AwR7ZT95nk8Cb72jmhPsfIbJ2XfDmk/HicwR27wIgonZdEu9+oKBpZINGpD81DO+KpQDEXnMdrrLJZE993dG8lZ66j9gGtbD5Xn4dMgHv9t0FuxM7tKR8v5sByF2/mT3DXy3YF127KrU+Hk9am1uw+V5HM1cbfQ9xjWpi87388ujL5G3bU7C7VMcUKj9yEwDZ6zazY+gkXEnx1HrpEVxJ8ZioSHY99SZZKz2O5a357F3Eh/JuGfhqsbylO7Wgav8bAchau4VtQwr//5e9vC3JV57H5vtfdCZrkcx1xvQlvnENbL6PTf0nklskc5nOLag+4HoAMtduYcvgyQX7kru0ofyV55F230uOZ24xphdlGlUnkO9l+YDJZG3bW7C7+dO3U75NfXyZOQAs6jke6wuQMrYXCdUr4IqK5Kehb3No1RbH8rZ6thdlG1XHn+9l6cDJZBbJm/L07VRoXR9vKO+CXuMxES66LXyBw6k7ANj51XLSpnztTN5Q5vOf6Um5RtXx5/tYMGgyGUUyn/vUbVRsVR9vVi4Ac+4cT2RsNB3/dR+uqEiyfzvM949Mwp/r4Gfy/xFut7st8BpQH1gJ9PR4PJuPaZMETACuAjKBMR6PZ2JoXxwwGegKZADDPB7P23903TNq8GaMGQxcDAQACwyx1q44QbuawDRr7bknOU9H4D/Az6HzxAHvWWv/dUy7y4Hq1loHfyof7833pjNj1nfExcYU2+71+Rg74XWmTX6J+LhYbr1nAB0vaMuXc+ZRr05N7u99KzO/mcekt6fx+MP3OJY3omFriIwi941huKrWI/ry28l7/zkAAnu2k/vmyGC7xucSmXEI/6bVxNzUH++yOfjXLCKyZWeizu+Gd/7HjmWOPq8dJjqaI/3vI7JBIxL63kfGU0MB8G/ZxJHHHg62a9eR6AMHggO36GgSHxpElLsReYvmO5YVIOmS83DFRLPt+oHEneOm0uN92HHP0wC4EuI4a/CdbL/5cfyH0il31z+ISC6F/2A6rsQ4Kg7p4+ygLaTMZW1xxUaRds1jxLeoz9lP3MmW3s8UZD57WE/Srh+K/1AGFe/pTmRyKSr07Er6ojXsmzKDmNpnU+vlAaRe0d+RvGUvb4MrJoqfr3qcxJT61Bjek7ReY0J5Y6n+xB1suO4JfAczqHzfNUQml8J3MJ0aT91J6Y7nkL1+myM5i0ru0gYTG8XabkNJTKlHzRF3kNpzLAARCbHUfPI21l07HN/BDM6+/2oiy5XCdyCdWk/3okzHc8gqgcxVurQkIiaKuVeOIDmlLs2H38LiXuML9pdtVpMFPcaQfzCzYFujAddyJHUnyx58jdINq1G6cQ3HBm9VLw/mnXPVCMql1KXF8FtYUCRvctOazL25eN6K7Ruz/dPFrBj2jiMZj1UjlHnG1SOpkFKHtk/czDe9/1mwv1yTmsy6ZSx5hwozpwz4BxunL2DTRwtp0f9aGtzamfWTZ5VE/FN3hqx5c7vdscAnwEDgQ2Aw8BbQ/pimLwA1gXpAaeAbt9u92+PxfAo8AyQAVYBGwCy32/2Dx+NJ+71rnzFr3owxjQiOSi+x1l4KPAa8+RdO+Z21tqO1thPQARhgjClWnrLWzirpgRtAtSqVefGZYcdt37JtB9WrVqF0qSSioqJIadaYFavXs3L1etq1bQlA+3Nbs2TZT47mjajeAP+mVQAEdm7EdXad4xtFxRDd+QbyvpwKgKtCVfxpwWP8v3hw1WjgWF6AqMbNyA9V0nypPxNZz318o5hY4m/rRdZrEwAw0dHkffs12dPedTIqAPGtGpH5ffDfLTmrPMQ2rVuwLy6lIXme7VQc0pua08bi238Y/8F0ACqP7sdvz79NICfP8cwJbRqRPi/4Wsz+KY34ZoWZE1o1ICd1O1WfuJP6Hz2Dd/9hfAfT+W3y5+x/L1ihMJEuAnnODTqT2jTkcChv5so0EpoVvo6TWjUgO3U71Z/sScNPRuHdF8wLkLHcw7bBJfOxUapNAw5/tyqUeSOJzWsXZm7tJnvDL9QacQdNPn2a/H2H8R0ozLylhDKXb+Nmz9zVABxcuYmyzWsV7jSGxFqVaPlcHzp+NpyaN3UAoGLHZgS8Ptp98BgNH+nO3rlrHMtboY2b3fOCeQ+s3ERys+J5k2pVos24Plz82XBqh/ImN6tF2aa1uOijYVww6UFiz3JwJgSo1NrNrnnBPtq3cjPlj+nj0rUq0W5cb7p98iT1brwQgB9H/JtNHy8KzkpUSSZn/xFHM/8f0Qk46PF43vd4PPnAaKCJ2+0+9gfcNQQragc9Hs9WgpW6O0L7egCjPB5PtsfjWQ58ANz5Rxc+kypvvwHVgTuNMbOstauMMW2MMR2A4aE28cDtQEFtN7R/NOAHNgN3n+DcSaH9PmPMPGAfUJZgJ9Wz1g42xgwj2MGRwERr7SRjTD/gZoLVu2nW2gl/95MGuKRTO3bt3nvc9qysLBITEgoeJ8THkZGZRVZ2NomJCQXbMrOyTkesk4uJg9zswseBALhcxdYhRLbsjG/9D5CdEWyyZxuRDVrhWzWfyAatMFExx571tDLx8dii/RQIgCsCAoXf1B17WVfyF8zDpgc/xGxmJt6Vy4m5+HJHswK4EuMJZByTN8IF/gARZUuRcG4zNnfrRyA7h5rTxpGzcgOlr+pI5txl5KVudTwvQERiPP70Ipn9hZkjy5Yi6bymbLj8YQJZudT/6FmyVnjI2/orAJEVylDzpf7sHDn5JGc/DXmT4vGnF76ObZE+jkwuRanzm7DukgH4s3Jp9OkoMld4yN2ym4OfLyLpvMaO5SwqMikOX0aR916RPo5KLkXpCxqz6qJB+LNyafrZ02QsTyN3y272f7aYUueXTOaoxDh8GTkFj20ggIlwYf0BIuNj2PTmbDZOmolxubjwo6EcWr2F6OQkoksnsLDHWKpf345mw29m2YOvOZM3KQ5v+snzpr05m9TXg3k7fziUg6u3kL5pNwfXfMjeBeup0f18Wo66g0V3OTc9HZUUR36R14X1F2aOio/h56mzWfv6V7giXHT5zxD2r9nKoQ07MBEuus9+hoiYKFb98xPH8v5lZ86atwZA6tEHHo/H73a7NxOsoKUWaRcBFHnj4gfquN3uskDFY9p6gEv/6MJnTOXNWrufYOXtAuAHY0wq0A1oDNxqre0MfA5cf/QYY4wB3gCutdZ2AHYBPUO7Oxtj5hljvgPeA/pZa4/WjN+31l5MsAMxxrQAugBtgfOBRsaYxsCNQLvQn2uMMceVa4wxdxljlhtjlk9+54O/r0OAhIQEsrML/39nZedQKimBhPh4srNzCrYlJSb+rdf9Q3k5wQHcUcYc92aKbNYO3/LvCh7nf/UOEQ1aEXP7EAgEsKFBnVNsdjYmLr5wg8sUG7gBxHS6mNxZXzia62QCmdm4Eor2cfAHNID/cAY5a9Lw7z+Ezc4le9k6YhvVpvQ1nShz/aXUeO9ZIiuUpfrboxzN7M/MxpVYJLPLFMmcTvbqjfj2HSaQnUvmj+uJaxysDsQ2qEG9D57m17HvkrlkvXN5M7KJKJLXFOlj36EMslZvwhvKm7HkZ+Ib1zrZqRzjy8ghIjG2cIOrMLP3UAaZqzYXZE5f8jMJTWqWTNAivJk5RCYUyWyCgwoAX04em96YhT8nH19WLvsW/kzpxjXIP5TJr7ODlefds1dStkiF8bTnzcghskgfmyJ5/Tl5eCYX5v1t0c+UaVSDvQvX89uinwHYOWs5ZZvUcCzv0cxRRT4vjKt4H6+f8jX+3Hy8WbnsXvwz5RpVB8D6/Hzc+TEWPTaFC19ybunN/yEJFB+UEXocf8y2L4CRbre7jNvtrgX0BmJDxx895veOP84ZM3gzxtQF0q21d1prqwO3AhOBLGCCMeYtgiXKqCKHVQAqA/8JVdQuJVi9g8Jp087W2sustTOLHHfsimg3sNRa67fWZltrHyI4aKwBfAt8B5QD6h5zHNba1621ray1rfrc3uOvdMFxatesxvadv3IkPQOv18uK1eto3qQhLZo14vsflgGwYMkyUpo7+y9q/y8eIuq1AII3JAT2/lK8QUwcREZh0w8UbIqo24z8udPJe+cZrLX4Nzs3DQLg/Xkt0a3bAsEbEvxbi1enTHwCJiqKwP59juY6mewVP5PYsTUAcee4yUvbVrAvd91GYurXIKJsKYhwEX9OA/I27WBT575sv+Vxtt/yOL59h/jljuOn4k+nrGUbKN05OJ0f36I+OanbC5/Pms3EumsQUTYJIlwkpLjJ3biD2HrVqD3xUbb1e4H0eSsdzZuxLJUynVMASEypT3aRvFlrNhPnrk5kcjBvYkp9ctJ2OprvRDKWpVL2oqOZ65GdWvjey1yzhfgG1QoyJ7U8MzIfWJZGpYvOASA5pS7poUX9AEl1KtPxsyfBZTCREZRvU5/Da7ZyYKmHyqFjyp/bkHSPc89j37I0qnQOXrtcSt2CmxAAkmpX5uJPn8QUyXtw7VbavNCXql3bAFCxXWMOrXG2+r13eRpVOzcHoEJKHQ4WyVyqdmW6fvJEQeaKreuzf+02zh/dk8rnNwTAm5WLDVhHM/8lNuDcn9+XTXBNfVHxBG9KKOphgmOZjQRn/N4GjlA4aCt6jhMdf5wzadq0GXCvMeZKa20ukEbwyb1I8KaCDGPM24Apcsx+YCdwtbX2iDHm6J0cf+TY/yOpoWu7CJY3ZxJcgLge6GKttcaYR4C1f+H5/Wlfzp5Ldk4O1199BY/268tdjwzFWkv3rpdSsUJ5buzelaGjXuC2ewcQFRnFuBGPOhGrgH/DUiLqNCO279OAIe+TV4k8vyv24B78qStwla+CPVx8EBTY/ysx3e8Fn5fAbzvJ/2KKo5nzFy8gqkUrSr/wChhD5vgxxHa/gcCvO8n/cTERVavh37vnj0/kkIzZP5DQrgU1pz8PwK+PvUjyndeQv303md/+yG/Pv031t4I3MKR/uYC8tO2/dzpHHJ61hKT251D/k7FgYPuACZzV9yrytu3hyJyl/Dr2Xer9ewQAh75YRK7nF2pPGYKJiaLqyD5AsBp29CaH0+3QVz9S+sLmNPr8GcCwpf/LVLrrSnK37eHw7GXsePbfNHj/SQAOzFhMjueX3z+hAw7MXEqZC5vTdMZoMLDp4Veocnc3crfu4eDs5Wwf/T6NPwgO2vfP+IHsIj/ES8qumcs568KmdPp8OBjD8kcmUe/uLmRu3cvu2Sv55ePFdP5yJNbrZ/uHC0lP28WGCZ/R6oW+dJoxgoDPz7J+Ex3Lu/Or5VS6sCkXfz4cg2FJ/0m47+pC5ra97Jq9ku2fLOaSL0YS8PnZNj2Yd/XoabQdfxf17rgYX3YeSwc6N/0PsO2r5VRp34Runz6JMYbv+79Ok75dSN+2l1/mrGTzJ4u58vORBHw+Nn24kMNpu1j/5tdcMOZOznnYQsCyeMhbjmb+PyKVwrVruN3uCIJFnmMLRBWBezwez5FQu2eA1R6P56Db7d5H8E7Vo4vX3Sc4/jjG2jNntG2MGQrcQHAA5gLGAhcClwOHgL3AAYJr3KZZa881xlwKPBlqn05wTVwj4B5r7U0nuMa80L5UY0xPoEFozdvjBKdtXQTXvL1ljBlEcB1cDLCU4NSr/9hzHuXdv+XM6cw/If+lwSUd4ZTlLD9+beCZ7rc0h6e1/6Lc/DPp33R/jtcfUdIRTpkvcMZMfPwpu42z61T/Dl7zx23ONNmu8Avde+e/HQ2d8/XLjv2sjbvsgZM+t9DXfGwFHgWmEbzb9GqPx9PymHbvEixGPQSkECwQXenxeJa43e4JBO9EvYXgIG42cJHH41n1e7nOqMFbuNPg7fTT4O300+DNGRq8nX4avDnD8cHbVxOcG7x1efB3n5vb7W5J8O7RBsAqQt/z5na71wPPeDye99xudyWCU6XnESxCPeHxeKaFjk8AXgauJDiNOszj8fzhd86E36e0iIiIyBnA4/GsAFqfYHvjIn/fA1x2kuOzgF6nel0N3kRERCR8nDlfFVJiwqtuLyIiIvI/TpU3ERERCR9nyK/HKkmqvImIiIiEEVXeREREJHxozZsqbyIiIiLhRJU3ERERCR9a86bKm4iIiEg4UeVNREREwofWvKnyJiIiIhJOVHkTERGR8KE1b6q8iYiIiIQTVd5EREQkfGjNmypvIiIiIuFElTcREREJH6q8afD2d8p/aXBJRzhl0Q+NKekIp+THxuHXx5HGlnSEU/KbiS7pCKcsw2VKOsIp2xwbXj+AGueXdIJTtyY6vN57AHvILekIp6x3SQf4H6Rp0/9h4TZwExEREVXeREREJJzY8Kuo/t1UeRMREREJI6q8iYiISPjQDQuqvImIiIiEE1XeREREJHyo8qbKm4iIiEg4UeVNREREwod+Mb0qbyIiIiLhRJU3ERERCR9a86bKm4iIiEg4UeVNREREwod+w4IqbyIiIiLhRJU3ERERCR9a86bKm4iIiEg4UeVNREREwocqb6q8iYiIiIQTDd5EREREwoimTUuaMUR364OrUg3we8n79DXswb0AuCrVIPqKngVNXVXrkff+cwT2/0rMP+4HDPbIfvI+mwTefMejr1mfyviJb/LWy+OKbZ+3cAkTp75PZEQE3btdynVXdSE3L4/BI5/j4KHDJMTHMXrYAJLLlnEurDG4x/YhsXENAnleUvu/Rs62vQW7643uRenWbvyZOcHndsc4osom0mjC/WAMuTv3kzpwEoEch/rZGOqO6UNi45oE8r2k9X+N3G17CnaX7XwONQZcD0Dm2q1sGjwZV2w07pf7EV2+NP6sHDwPvoL3QLozeUOZW4zpRZlG1Qnke1k+YDJZRfq4+dO3U75NfXyhPl7UczzWFyBlbC8SqlfAFRXJT0Pf5tCqLY5mPu/ZniQ3qo4/z8eiQZPJKJK57VO3cVbr+ngzcwH49s7xeDOC+Su2ddPh5fv4T+uHHIxruHJULyo1rIE/38snj73Bwe17j2tz29RBbJizgmXvfUtMUhw3/qsf0XEx+L1+pj/yCpn7jjiWGWNo9Wwvyjaqjj/fy9KBk8ks0scpT99Ohdb18YZeFwt6jcdEuOi28AUOp+4AYOdXy0mb8rVDcQ1Xj+pF5YY18OV7+fixNzhwgj6+Y+ogfp6zgqXvfUuHe6+kfofmAMSWiiepQhmeaX2fI3mP5rltVF+qNayJL9/L1Mcm8tv2Pce1eXjqEH6as4x5780mOi6GeyY8TELpRPJy8njjkQlkHHTw8+Kv0K/H0uCtpEU0bA2RUeS+MQxX1XpEX347ee8/B0Bgz3Zy3xwZbNf4XCIzDuHftJqYm/rjXTYH/5pFRLbsTNT53fDO/9jR3G++N50Zs74jLjam2Havz8fYCa8zbfJLxMfFcus9A+h4QVu+nDOPenVqcn/vW5n5zTwmvT2Nxx++x7G8Fbq0xhUTxYquwyjVsh51R97O2jueK9if1LQWq28ajfdgRsG2hv+8l13vzGHvx4uofEtnqt/TjW3/dKafy3VpjSs2mlXdhpKUUo/aI27n557BQXJEQiy1n7yN1deOwHcwg6r3X0VUuVKcdd2FZKf+wobnp1Ph6vOp/vA/2PzEVEfyAlTp0pKImCjmXjmC5JS6NB9+C4t7jS/YX7ZZTRb0GEP+wcyCbY0GXMuR1J0se/A1SjesRunGNRwdvNW4PJj5y6tGUiGlDm2evJlv7/xnwf5yTWsy++ax5B3KLHZcQpVkmtx9BSYywrGsAA0vbUVkTBSvXzucqi3q0mXYLbzXd3yxNhcPvIG4MokFj1Ou68De1B18PeYDWt3UiXZ3dWPW6Pccy1w11MdzrhpBuZS6tBh+CwuKvC6Sm9Zk7s3FXxcV2zdm+6eLWTHsHcdyHtUo1McTrx1OtRZ1uWLYLbx7TB9fMvAG4ov08fyJM5g/cQYAd0wZyKwx0xzNnHJpG6Jiohl97RBqt6jHTcPuYELfscXaXDuwBwlFMnfocTHb1m7h8wnTueC6TlzZ7zreH/mmo7nlv+fItKkxppYx5iNjzDxjzCJjzKvGmKS/+Ro1jTFLQn/fZoyJDf395tA1vzfGLDTG3P5fnn+eMabB35kZIKJ6A/ybVgEQ2LkR19l1jm8UFUN05xvI+zL4g9hVoSr+tOAx/l88uGr87bH+ULUqlXnxmWHHbd+ybQfVq1ahdKkkoqKiSGnWmBWr17Ny9XratW0JQPtzW7Nk2U+O5i3dtgEH5gb7LH3FRko1L9LPxhBfuxLu5+8iZcZTVO7RCYCE+lU58G3wmCNLPZRu41w/l27TkEPfBfsoY+VGkorkLdXaTdaGX6gz4naaf/oU3n1H8B5Ip3SbBhz8Lpj34HerKHNhU8fyApRv42bP3NXB66/cRNnmtQp3GkNirUq0fK4PHT8bTs2bOgBQsWMzAl4f7T54jIaPdGfv3DWOZj6rjZtdoWvuW7mZcs2KZy5VqxIXjOvNFZ8+Sb0bLwQgIiaK88bcyQ9D3nI0K0CN1m42zg/m3fnTJs5uWrvY/sZd2mADATbOW12wbW/qL0QnxgEQkxhHwOd3LjBQoY2b3aE8B1ZuIvmYPk6qVYk24/pw8WfDqR16XSQ3q0XZprW46KNhXDDpQWLPcq5KX7O1m7RQH+84QR83CfWxp0gfH9X4stbkHMli4/fOvo7rtW7I2vnBz4stP22kZtPiP0dadTkXG7CsnVf4uTvnzS+Z8fJHAJSrUp4j+w47F/gvsgHr2J8z1WkfvBlj4oDPgXHW2o7W2guAH4EPHLj2lUBv4Apr7YXAJcCNxpjrT/e1/7SYOMjNLnwcCICr+P+WyJad8a3/AbKDVaHAnm1ENmgV3NegFSaqePXLCZd0akdk5PGF26ysLBITEgoeJ8THkZGZRVZ2NomJCQXbMrOyHMsKEJkUhy+9sJ+tP4CJCPZzRHwMO6fM4uf7/8Xqm57h7J6XktCoOhnrt1H+smA/l7+sFRHxzvVzRFIcvozieQnljUpOoswFTdjy9HusvfkZzu7blbjalYsd48/MITIp3rG8AFGJcfhCU4oANlDYx5HxMWx6czZLH3iVhTePpXbPiyndsBrRyUlEl05gYY+x/DpnJc2G3+xo5ujEOPKL9vMxmTdMnc38fhOZfcs4GtxxMWUbVuPcUXew7rUvyd5zyNGsEBx85RbJG/AHcIXynlW/Ks2uPp9vx39Y7Jjsw5nUa9+UB+eMo93d3Vjx/+Y5GZmopDi86Sd/XaS9OZsf+r3KvJvHUveOiynTsBrpm3az9vkP+fYfo9g5azktR93hWN5j+9gW6eOK9avS/Orz+eaYPj6q431X8e1Lzs6CAMQlxpFzktfF2fWrce7V7flk/PHVQBsI8Oj7I7j4ji6smbfSsbzy1zkxbdoVmG+t/fHoBmvt28aYB40xASDJWptljBkE+IAPgdeBWCAXuAuIAGYAB4CZBAd/w0OniwduB060GKkf8Ki19kjoujnGmAHAJGC6MWaPtbYSgDFmGvAasBKYDJQBygNvWGsnnuzJGWPuCmVkwhUtuTOl9smanlheTnAAV3jC426DjmzWjrxphWX7/K/eIbpbbyKaXUBg81psdgZnioSEBLKzCz9EsrJzKJWUQEJ8PNnZOQXbkhITT3aK08KXkUNkYpF+dpnggAjw5+Sx4/WZBevZDi1cR1KjGmwa/g71n+1Nxe4XcGjB2mIJ56gBAAAgAElEQVRTqqebPyOHiCJ5jctAKK/3UCYZqzbhDf1L+ciSDSQ0qYm/yHOMSIzDl+7sANmbmUNkQmzhBuMq6GNfTh6b3piFP9TH+xb+TOnGNcg/lMmvs1cAsHv2Sho8cJWjmfMzc4gq1s+uYq+L9ZO/xp8bzLx70c+Ua1KTim3dJNWsCI9ATJlEOrx6P/Pve8WRvHmZOcQU6WPjMgRCeVtc255SlZK584OhlKlaAX++j8M799GqR2cWTJrBsve/o2KDavSY+DAvdxnsSF4Ab0YOkYlFMpvifeyZXPi6+G3Rz5RpVIOds5bjz8kDYOes5TQddJ1jef+oj0tXSqbPB0MpW6SP0+av4ay6Z5OTnn3c+jgn5GTmEJtQ/HV8NPP513akTKVkHv1gBOWrnoUv38f+nb+xbn6wSj/u5hFUqnM2j7w5hMc63O949v+KvirEkWnT2sDmE2xPA5YB/wg9vgl4B3gemGCt7RT6+5jQ/krApdbacUBj4FZrbWeCVb2TVdJqAMcuoNkG1PydvHWBadbaS4FuQP/faYu19nVrbStrbatTHrgRnPaMqNcCCN6QENj7S/EGMXEQGYVNP1CwKaJuM/LnTifvnWew1uLf7GyJ/vfUrlmN7Tt/5Uh6Bl6vlxWr19G8SUNaNGvE9z8sA2DBkmWkNG/saK4jSz2UuyjYz6Va1iNrQ2E/x9epQsqMp8BlMJERlGnbgIy1W0nu0IytL0xndY9nsAHLwfnO9XP6slSSL0oBICmlHlmphXkz12whoUF1IpOTIMJFUst6ZKft5MiyVJJDzzG58zkc+THVsbwAB5alUemic4LXT6lLemixOUBSncp0/OzJgj4u36Y+h9ds5cBSD5VDx5Q/tyHpnp2OZv5tWRpVOwcXmldIqcOhDYWZS9WuTNdPn8CEMldsU5/9q7fw8YWDmHX9aGZdP5q8w5mODdwAti/3UL9TsL+qtqjLXk9h3q/HfMCka55kyk2j+OnD71k0ZSYb568h90gWuaGKaNaBdGKS4k547tNl37I0qnQOZi6XUrfgJgSApNqVufjTJwv6uHyb+hxcu5U2L/Slatc2AFRs15hDa7Y6lnfbcg/uUB9Xa1GXPUX6eNaYD3j1mid546ZRrPjwexZMmVkwxVq3XRPSTjCV6oSNy1Np1in4eVG7RT12erYX7Js+5l1GXfM4Y28azsIP5/L1lBmsm7+Krvd157zuwWnq/OzcgsGehAcnKm+7gDYn2F4PuAV4xRiTCqRZaw8YY5oCQ4wxjwGGworaVmvt0b/vAiYYYzKBs4FFJ7n2doKDxxVFttUPHX8sE/rvHuBhY8y1QDoQ9See43/Nv2EpEXWaEdv3acCQ98mrRJ7fFXtwD/7UFbjKV8Ee3lfsmMD+X4npfi/4vAR+20n+F1NOZ8Q/5cvZc8nOyeH6q6/g0X59ueuRoVhr6d71UipWKM+N3bsydNQL3HbvAKIioxg34lFH8+2buZTkDs1o+cXTYAwbHnqVand3JWfbHvZ/vYK9Hy2k1czRWJ+f3f/5nizPTiISYmn4z3sJ5HvJ8uwkbbBz/bx/5lLKXNiM5jNGYYzB8/ArnH13N3K27uHg7OVsHf0eTT8IrjncN2Mx2ak7yN2+F/eEB2j+2dNYr48N977kWF6AXTOXc9aFTen0+XAwhuWPTKLe3V3I3LqX3bNX8svHi+n85Uis18/2DxeSnraLDRM+o9ULfek0YwQBn59l/U5a5D4ttn+1nCoXNqHrZ0+CMSx85HUa39WF9K172TFnJZs/XkzXGSOxPh+bPlzI4bQTfXQ4Z8PXy6nbvil3fTQCjOHjQZM4v/cVHNy+h9RvTjzt9c0L07lm7F20vfViXFGRfDr4DUcz7/xqOZUubMrFnw/HYFjSfxLuu7qQuW0vu2avZPsni7nki5EEfH62TQ++LlaPnkbb8XdR746L8WXnsXTgZMfy/vz1cuq1b8o9H43AGMOHgybRrvcVHNi+hw0n6WOA8rUrs2nhOsdyFrXy6x9p3L4ZQz8aDcYwZdArXNr7Sn7bvptV3yw/4TEL/vMdfV7ox4U3dsblcjFl0MsOp/4LdLcpxtrTuyDPGJMILAV6WmuXhrb1Af5hre1ijPkWOAhMtNZ+Z4z5GHjeWrs4dINAB+BrgtWwc0PH7wNqW2szjDFvE6ymTT3axhizDWgAXAo8CFwLtADuJzgVOtla+74x5gDB6lw+wenSB4CrgI3W2onGmE7AW9baGsaYecA91tqTljOynrjhzF3deALRD43540ZnmAWNnZvu+btEmrB6WfCbiS7pCKcsw2X+uNEZZnNUeP0Aapwffn28Jjq83nsAe8gr6QinbOq2jxx9cWRP7OfY/9j4e/91Rr7wT3vlzVqbGbpx4J/GmHKha64BeoSaTAGeBuaGHg8EJobuFo0DTvQlSu8CPxpjDgF7gSonufbnxpgE4CvAhs6XDhy93elFYAnBqdWjdeYZoevfQnCNnc8Y4/wdASIiInK8M/guUKc48j1v1trNBCtaJ9r3PvB+kcdbgMtO0PTcIm36c+K1aOeG9tcs0vYDjrmz1Rhzfmjf0wQHjsc60XdCdDxRfhEREREn/U9+Sa+1dnFJZxAREZH/gu421e82FREREQkn/5OVNxEREQlTqryp8iYiIiISTlR5ExERkfBxmr/iLByo8iYiIiISRjR4ExEREQkjmjYVERGR8KEbFlR5ExEREQknqryJiIhI+NCvx1LlTURERCScqPImIiIi4cNqzZsqbyIiIiJhRJU3ERERCR9a86bKm4iIiEg4UeVNREREwobV97xp8PZ3ylm+t6QjnJIfGw8u6QinrP36MSUd4ZQNazW0pCOcovD7YMwn/KZROuSG18RHzZiMko5wyp7M2lXSEU7Z6mGtSzqChAEN3kRERCR8aM2b1ryJiIiIhBNV3kRERCR86HveVHkTERERCSeqvImIiEj40Jo3Vd5EREREwokGbyIiIiJhRNOmIiIiEj70Jb2qvImIiIiEE1XeREREJHzohgVV3kRERETCiSpvIiIiEj70Jb2qvImIiIiEE1XeREREJHxozZsqbyIiIiLhRJU3ERERCRtW3/OmypuIiIhIOFHlTURERMKH1rxp8FbijCHh/keIrF0XvPlkvPgcgd27AIioXZfEux8oaBrZoBHpTw3Du2IpALHXXIerbDLZU193PLN7bB8SG9cgkOcltf9r5GzbW7C73uhelG7txp+ZA8CaO8YRVTaRRhPuB2PI3bmf1IGTCOTkOxp7zfpUxk98k7deHlds+7yFS5g49X0iIyLo3u1SrruqC7l5eQwe+RwHDx0mIT6O0cMGkFy2jGNZjTFcM+pOKjesji/fx0ePvc6B7XuPa9Nr6qOsn7OCH9/7ho73XkX9Ds0BiCsVT1KFMoxqfa8y/0Hm60bdSZWGNfDl+/h/j01i/wky9536GOvmLGfxe98AMHzJq+zftgeAbSvT+HLcNKcC03xML0o3rkEg38tP/d8gq8h7r+mo2ynX2o0vK/jeW3LHCzQcdB2lm9QAIKZCGbzpWXzfdbgzeUOZq466h7hGtbB5Xn557GXyt+8u2J3UMYVKD/UAIGf9ZnYOew1XXAw1Jgwkokwigew8tj8yHv/BdIfiGkaOG0yDxvXJz89nyCNP88vWnQX7b7nzeq696Uqstbzy/GTmzllQsO+SKzrR5aqL6X/PUEeyFklNVOceuMpXBb+P/G/exR7ZV7A3MuUSIuu3wmLxLZuFf/MqiIwm+vLemNh48OaTN3sq5GQ6nFv+W2fE4M0YUxsYB1QFsoEc4FFr7foibWoC06y15x5z7IvAeGvtL79z/onAudbaFn9/+r8m+rx2mOhojvS/j8gGjUjoex8ZTwXf+P4tmzjy2MPBdu06En3gQHDgFh1N4kODiHI3Im/RfMczV+jSGldMFCu6DqNUy3rUHXk7a+94rmB/UtNarL5pNN6DGQXbGv7zXna9M4e9Hy+i8i2dqX5PN7b982PHMr/53nRmzPqOuNiYYtu9Ph9jJ7zOtMkvER8Xy633DKDjBW35cs486tWpyf29b2XmN/OY9PY0Hn/4HsfyNrq0FZExUbx67XCqt6hL12G38k7fF4q1uXTgDcSVSSx4PG/i58yb+DkAPacM4qsxHziWN1wzN7m0FZEx0bx07ZPUaFGXq4bdxpt9ny/WpsvAG4kvkrl8jYrsWreVyX2eO/Z0p13lLq2IiI3i+27DKZtSlyYjbuHHnuML9pdpWovFPcaQX+S9t/bJdwEwkRG0/3w4qwZMdjRz6cvOxRUTzcbujxLfws3Zw+5ka9/RALgS4qgypBebbhyC/1AGZ919LRHJpUi+piPZazexd8L/I/m6zlTqdwO7RjqT+5IrOhITG8MNV/TinJZNeHzkI9x7+wAAyiaX4ZZe13NVp5uJiYnmq0XTmXtOcPA2bPRA2nU6jw3rPI7kLCqiTnNMRBR5/xmHq1ItotpfR/4XE4M7o+OIPKcTuW89AVExxN48FP/mVUQ2aUfgt+34ls4kouF5RLW+Au/3/3E8+39FlbeSX/NmjIkHPgdesNaea63tDIwEXvkzx1trH/6DgVs8cAGwwRjT8W+I/LeKatyM/FAlzZf6M5H13Mc3iokl/rZeZL02AQATHU3et1+TPe1dJ6MWKN22AQfmrgIgfcVGSjWvU7jTGOJrV8L9/F2kzHiKyj06AZBQvyoHvg0ec2Sph9JtGjiauVqVyrz4zLDjtm/ZtoPqVatQulQSUVFRpDRrzIrV61m5ej3t2rYEoP25rVmy7CdH89Zq7SZt/moAfvlpE1Wb1i62v2mXNtiAxTNv1XHHNr6sNTlHskj7fo0jWY8Kx8y1WzcgdX4wz/afNlHtmMzNu7TFBgJsKJK5atPalK6UzH0fPEHfqY9RoXZlx/KWa+Nm73fBPjq0chNlmhfJawwJtStxznO9af/5cKr36FDs2Nq9L2PfvLWkp+5wLC9AQuuGpM9fCUD2Tx7imtUt3NeyAbmp2zl7WG/qTn8W7/7D+A+ms+/Nz9n78nQAoqpUwLv/iGN5W7Y9h++/XQzAqhXraHJOo4J9hw4e5sqOPfD5fJSvWI70I4WVqpXLVjN80LOO5SzKVaUu/u3BWkdgz1ZcFWsU7vTlYdMPQFQMJioabHDg41v1Hb5lXwFgkspic5ypbMrfo8QHb8CVwHfW2h+ObrDWLgU6GWPeMsbMMMYsBsqe6GBjzDxjTANjzPJQdQ5jzPXGmJdCTW4AvgXeAh4octw6Y8zHxpgPjDGljTEfGmPmhv40DbV5wBjznTFmgTHmC2NM9N/95E18PDYrq3BDIACuiGJtYi/rSv6Cedj04AeYzczEu3L53x3lT4tMisOXnl3w2PoDmIjgSykiPoadU2bx8/3/YvVNz3B2z0tJaFSdjPXbKH9ZKwDKX9aKiPiYE577dLmkUzsiI48vNGdlZZGYkFDwOCE+jozMLLKys0lMTCjYlln0/5EDYhLjyM0o3seuUB9XrF+Vc66+gDnjp5/w2E73Xc03L33kSM6iwjFzbGIcORk5BY+LZq5UvyopV1/ArGMyp/92iG9e/ZRXezzNN698yq3/fACnRCbF4c048XsvMj6GLVO+ZsUDr/JDj7HU6nkJpRpWA8BERVDzts5snPiFY1mPikiMx59R5P3jD8DRzMmlSDyvKb+OeYstd4ykQu+riKlVJdguEKDOB6Oo0LMbGXOd+7xLTEokI6NwUBbwB4iIKPxM9vv93Nr7BqZ/9RazZnxTsH3mp3OwtmQqQiY6FptX+DrGBsAU/ni3mYeIu204sT2G4Fs9t0g7S8y1DxPVvBP+rescTPwX2YBzf85QZ8LgrRaw6egDY8xnxph5QCrBadTvrLXnA4f+4DxTgNtDf+8JvBH6ex9gMvAN0MIYc3ZoeyLwtLW2BzAE+NZa2wm4C5hojHEB5YCLrbXtgSig9bEXNcbcFRo4Ln9nx+5jd/8hm52NiYsv3OAyEPAXaxPT6WJyZzn/oXsyvowcIhPjCje4DNYffJH7c/LY8fpMAjn5+LNyObRwHUmNarBp+DuUv6wVzT8YAoFAsSnVkpSQkEB2duEPw6zsHEolJZAQH092dk7BtqTExJOd4rTIy8whJqGwj43LEAj1ccq1F1KqUjJ9PxhGy+s60L73FQXrxs6qeza56dnHrTVT5hPLzcwhNiH2hJlbX3thQYWtzXUd6NC7Kw06NGfHmi2smxMcTGxd7qF0pRP+u/K0CL73iuc9+t7z5eSx5Y1Z+HPy8WXlsn/heko3DlZgzrqwKQeWpOIrMlB1ij8zm4iE4p8XHM18KIPsNRvx7TtMIDuXrB/XEdeoVkHTzT2GsfH6wdR8bbBjeTMzMklILPwHnctl8PuLfyb/e8p/uKDJZbQ+L4W2F7RyLNvJ2PxcTHRskS2mYOARUaMJJr40OVOHkvPmECJqN8dVsWZBy7yPXyT3w+eJ6Xq3s6HlLzkTBm87CA7gALDWXm2t7UhwsLYT+LMLCN4DrjPGVAFKWWvXGWMaAk2AF4CZgAWKLlw6eu6mwJ2hQeMbQFlrbQDIBz4wxkwhOJCMOvai1trXrbWtrLWtbq926tMn3p/XEt26LRC8IcG/dWux/SY+ARMVRWD/vhMdXiKOLPVQ7qLg8sFSLeuRtaFw1jq+ThVSZjwFLoOJjKBM2wZkrN1KcodmbH1hOqt7PIMNWA7Od3Z67GRq16zG9p2/ciQ9A6/Xy4rV62jepCEtmjXi+x+WAbBgyTJSmjd2NNe25Wm4O50DQPUWddnjKZzq+mrM+7xyzRO8ftPTrPhwPgumzCyYrqzbrskJpyWV+cS2LvfQsFPwtVyjRV12F8k8Y8z7vHjNMF656SmWfjif+VO+JHX+ai57+Do63HkFAFUaVufQrwccy3twmYdKFwX7uGxK3WJToIl1KtP+8+EF773kNm4Orw1+nlRo34S93612LGdRWcs3UKpTcIAT38JNrmd7wb7stZuIddcgomwSRLiC+zfu4Kz7rqNs944ABLLzCgaoTli5dDUdL74AgHNaNsGzoaC2QK06NXhlanCto9frIz8/H3sGVGcCuzcTUbMJAK5KtbAHdhXss3nZ4PeC3wd+X7BCFxNHZKvLiGgQ/NmDN/+MrjLJ8c6EGxY+AwYbY8611i4BMMbUJThYygH+1CvKWptujFkB/BOYGtrcBxhqrX0ldN7qwA/GmKdD+4+eOxX4t7X2fWPMWUAfY0wz4BprbdvQurkVgPmrT/ZY+YsXENWiFaVfeAWMIXP8GGK730Dg153k/7iYiKrV8O/d83df9i/ZN3MpyR2a0fKLp8EYNjz0KtXu7krOtj3s/3oFez9aSKuZo7E+P7v/8z1Znp1EJMTS8J/3Esj3kuXZSdrgKSX6HL6cPZfsnByuv/oKHu3Xl7seGYq1lu5dL6VihfLc2L0rQ0e9wG33DiAqMopxIx51NN/6r5dRr31T7vtoJBiYPmgS7Xtfwf7te9nwzYqTHlehdhU2LlzrYNJC4Zh57dfLcLdvyoMfPYUx8MGg1+gQyrz+JJm/ffUzbn3xfhp2bkHAF+CDgRMdy/vrzOVUuLAp7WeMwBjDyocnUefuK8jauoc9s1ey4+NFdJj5FAGvnx3TF5DhCf4QT6xbmR3TF/zB2U+PI7OWkNTuHOp9PBaM4ZeBL1Ghz9XkbdtN+jdL2T32Heq8OxKAw18sJDftF3wH06n+wsOUu/ESiHCxY9AEx/LO/nIuF3Roy//78k2MMQx+cCS97rmF7Vt38N3X37NhfRrTv3oLay3ff7uYpYtXOpbtZPybVuGq3pCY6weBMeTPeZvIFhdhD+/Dv3UNgb3biLnxMbCWwK+bCPyygcD+ncRc0pPIxheEjnmnpJ/Gn6cbFjAlNUdfLERwrdoYoDLBAaUPGEtwvdo0a+2sUJt1BAdaRw0geHPDPdbaVGPM+cCs0Hm8wFagubV2f5FrzQT+DTwDNLDW5hpjyhGcdi0DlAJGEJxm/SL0OC/0Z4q19r2TPY/9XTqUfGeegjUrK5Z0hFPWfv2Yko5wyoa1cvprA/735BNWbz0AOuSeCRMff17NmPD7Gonrs3f9caMzzOphx63OOePFP/Ta317Y+D2Z/a9y7A2fOP5zR5/bn3UmVN6w1m4DbjrBrpnHtDnRwqOORdosJjjYOursYxtba68I/fX9ItsOANec4NydT55aREREnGZVeTsj1ryJiIiIyJ90RlTeRERERP4UVd5UeRMREREJJ6q8iYiISPgI6GtNVHkTERERCSOqvImIiEj40Jo3Vd5EREREwokqbyIiIhI+VHlT5U1EREQknKjyJiIiImHjTPi1nke53e62wGtAfWAl0NPj8Ww+ps16oEaRTdHANo/HU9/tdicBhwn+LvejnvR4PON/77oavImIiIicIrfbHQt8AgwEPgQGA28B7Yu283g8jYscU5rgIK9/aFMzYJ3H42l+KtfWtKmIiIiEj4B17s/v6wQc9Hg873s8nnxgNNDE7XY3+J1jxgLfeTyeL0KPmwOrT7ULVHkTEREROXUNgNSjDzwej9/tdm8GGhXdfpTb7W4I9ADqFNncHKjvdrs9QCIwDXg8NBg8KVXeRERERE5dApB9zLZsIP4k7R8Bpng8nv1FtmUC84A2wHnAhcCQP7qwKm8iIiISPs6crwrJBuKO2RZPcEBWjNvtjgZuAC4out3j8Qwo8vCI2+0eAwwFRvzehVV5ExERETl1qQTvMgXA7XZHAHUBzwnaXgDs9Xg864tudLvdI91ud+0im2KA3D+6sCpvIiIiEjbsmVN5mwtUdLvdtxNcqzYY2OzxeDacoG0bYMkJtrcA3G63+06gQugcE//owhq8/Y1+S0ss6QinJNKcMW+AP21Yq6ElHeGUjVo+uqQjnBLfog9LOsIpe/ChZSUd4ZR9Fesv6QinpAwJJR3hlJ0VXbqkI5yyy8dtLOkIp+z7h0o6QcnweDw5bre7K8HveXsFWEVwavTod7s94/F43gs1rwHsPsFp+gKvAjsBX+hcr/3RtTV4ExERkfBx5lTe8Hg8K4DWJ9je+JjH953k+L3AP071ulrzJiIiIhJGVHkTERGR8BEo6QAlT5U3ERERkTCiypuIiIiEjTPobtMSo8qbiIiISBhR5U1ERETChypvqryJiIiIhBNV3kRERCR86G5TVd5EREREwokqbyIiIhI2dLepKm8iIiIiYUWDNxEREZEwomlTERERCR+6YUGVNxEREZFwosqbiIiIhA3dsKDKm4iIiEhYUeVNREREwofWvGnwVuKModJT9xHboBY238uvQybg3b67YHdih5aU73czALnrN7Nn+KsF+6JrV6XWx+NJa3MLNt/raOa6Y/qQ2LgmgXwvaf1fI3fbnoLdZTufQ40B1wOQuXYrmwZPxhUbjfvlfkSXL40/KwfPg6/gPZDuYGTDNaPupHLD6vjyfXz02Osc2L73uDa9pj7K+jkr+PG9b+h471XU79AcgLhS8SRVKMOo1vc6lhlgzfpUxk98k7deHlds+7yFS5g49X0iIyLo3u1SrruqC7l5eQwe+RwHDx0mIT6O0cMGkFy2jGNZAwHLM58sJm33AaIiIxh+XXuqly9VsP/t+WuZtWozxhj6dG5O5yY1ycjJZ/D7c8nJ9xIVEcHoHh0onxTvSF5jDLeM6kPVhjXx5Xt5+7HX2Ld9z3Ft+k19nNVzljH/vTlEx8XQd8JDJJROJC8njymP/IvMg86+jnuM6kO1hjXx5nt59ySZHwhl/v69OQXbK9apwuOfPMvA1n3w5Tn3eRFu7z1jDAOffYi6jeqQn+dlzKDn2bXt14L9195xNVfccBnWwtQX32HxN0twuVz0G34vDZq7iY6OYsr4t1n8zRJH8h7N3P/Zh6jTqA7evHzGDXqhWObud1zN5TdcChbeevFdfghlfmD4vbib1ycqOoqp49/hBwczy19zWqdNjTG1jTEfGmOWGGO+M8Z8aYxpfDqvecz1XcaYIcaYBcaYecaYucaYpk5d/89IuuQ8XDHRbLt+IL899xaVHu9TsM+VEMdZg+9kR9+RbLtuAN5de4lIDv4wdCXGUXFIH2cHbSHlurTGFRvNqm5D2TrqPWqPuL1gX0RCLLWfvI11t41hVdeh5O74jahy/5+9+45vquz/P/66ujdQQYaMslr2KBSQLQrKRoYMZaiAiqBsUJAhIFQFxJshqAwVcSsgKksoFim0UDZtGbayZ6GTtkmu3x8JaUuL3NzSU/L7fp6PRx4k57rOyZv0JLnyOVdO/Cg9sB1pMX9zoNsULn4TRvmRPQzNXKNdQ1zcXVncfSq/ha6h4+Tn8vRpN/YZPIv62G9vX7KOZX1msKzPDG6cv8Y3Y5YYGZnlq79l6pwFZGZk5lqeZTIR+uEyls2fxcpF7/Lt2l+5cvUaX/+4gaqVA/hsyft0bv84S1d9ZWjebUcSyDCZ+Wx4F15vH8K8n3fb25LSM1iz8wifvdqZjwY/xXvrrG8S6/bGUaVUMZa/0ol2dSuyavshw/LWaxeCq7sbc7pP4ofQ1TwzeUCePt3G9sE7xz7Rou/jJBw6xbvPTCFy/U46jjB2P76VObT7JH4MXU3PfDJ3vS0zgIePJ70mDSSrEF4vHO251/Kp5ri5u/FSlxF8NPtjRkzJHjQWKeZH94FdeanrCF7vPYaxs0cC8FTPtri4uvBKt9eY8MJblA14xLC8AC2eaoabuxvDuoxg6exPeHXKy7kydxvYhWFdX2Nk77GMmf06AO16tsXZ1ZlXu73Omy9MoWxAGUMz/xvaYtzlQVVggzellBewDpirtW6itW4DTAcWFdR95mM8UBxopbVubbu9VinlamCGf+TVsAYpO/YCkL4/Fo/aVextnsHVyYhNoOSbLxLwVSimK9cx2z7ll541gkvvr8KSnmF45iKNqpP4ezQAyfuO41u3sr3NLySI1GN/U69ydWEAACAASURBVHnaAOr+9DZZl2+QdTWJIo2qce33/QBc+30/RVsaO4auGBJEXNgBAP6OPkHZ2pVytddu3wht0cRu359n3ZpPhpB+I5W4HQcNyXpLuTKl+eCdyXmWn4o/TfmyZSji54urqyvBdWqy98AR9h04QvPGDQBo0SSEiMhoQ/NGx1+gWZD1TatOhYc5cuaKvc3TzZXSRX1IzzSRnmlCKQVA1VL+pNmqQKk3s3BxNm4abtWQ6hwOsz5Gp6KPU6F25Vztwe2boC2aw9uzH8ety39hw8IfAPAvU5zky9cNywtQJaQ6R2yZ//ovMwM8N/slfnrvSzJvGv964WjPvTqNahGxLRKAI/uOUa1OkL3tRmISA9sOxmwy4/+wPyk3UgBo1CqEy+cv895n7zDx3THs3LzLsLwAtRvVZrct89F9xwi6LfMLbYdgNpl5KFfmhlw+f4XQz2Yx/t3RhmcW/05BvlJ2Bn7XWtv3CK31HuAxpVQtpdQmpdQWpVSUUqopgFIqQSm1USn1wT/0eVEpFa2U2qqU+lUpNUgp5aqU+lQptUMpFa6Uam27y6HADK2t42etdSQQorXOUkq1slUDf7dVBgOVUgFKqUO2Kt14pdQwpdRupdQupdR7BfEgOfl4YUlOzV5gsYDtDcy5mB/eTepwMXQlCS9MxX9QV9wCylDitX6kbIskI+avgoh0V86+npiS0+y3tTk7s6u/L0Wb1eLUjNUc6vcOjwzpiGel0rnWMaek42LQobFb3H08uXlbZidb5pKBZanXtRmb532b77qPDevKlgXfG5Izp7aPNcfFJe/MhtTUVHy8ve23vb08SU5JJTUtDR8fb/uylNTUPOsWpNSbWfh4uNlvOzspTObsj64li3rTfe739FnwE32bWQvwRbzc2RV3lu7vf8+qsEN0Cwk0LK+HjyfpOfYJS459okxgORp3bc7aeV/nWU9bLIz5ciptBrbn0HZjB8i3Z9a3ZW7UtTnrbsvcaWQvDv2+jzPHEgzNeoujPfe8fbxIzfGabLaYcc7xocJsttBjUDeWrV/Itg07ACjq70fZimUZN+BNvli8hjfnjS/UzJZ8Mncf1JUl6xey3Za5iH8RylZ8hAkDJrF68Ve8YXDmf8Vi4OUBVZBz3ioCJ27dUEqtBYoApYF3gDFa60NKqX7A88CfQDkgWGt9VSnV+/Y+Sqk4YAJQD8gAttk2Pxi4orV+USn1ELADqAl4aa0Tc4bSWl+1Xa0JPKe1PqeUehPoBawGSgENtNaZSqlIYITWOkIp9YpSykVrbcq5PaXUUKyDRKYWr8UzfuXv6UGypKTh5O2ZY4NOYHvDM19PJv1gHOYr1v9CWuRhPGpUoki3x8g6f4WivdrhUqIY5VfNJKHvhHu633/DnJyOs092ZuWk7JmzElNI3n+CLFtF4kbEMbxrBWBOTsfFto6zjyemJGMHFhkp6bh7585ssWUO7t4Sv1L+DFkzmWJlS2DONJF45jJxYQd4uMoj3ExKyzNHpzB5e3uTlpb9Zpialo6frzfeXl6kpaXbl/n6+NxpEwWTy8OV1BxzqSxa2ytpO2NOcyUpnQ0TnwFg2CcbqRdQkhXbDzCodR16NqlG3PlrjP18K9+O7m5I3psp6Xjk2CeccuwTj3ZvRdFS/oxZM5WHbPvElTOXORJmrQ7N7TedUpXLMGL5G0xqNcKQvPllzrkfN7FlHpUj89Uzl2ncrSWJF67SrHcbipQoysjPJvN+76mGZXa0515qShpePjn3CyfM5tzv4t+v/Im1q39m7hdzCG5ajxuJSfy5xVqn2B9xkHKVyhZqZpVP5h9WrmXd6g2898Vs6jetR1Jikn2O24GIg5Q1OLP4dwpy8HYaaHjrhta6K4BSKgI4CbyllEoHfIFbM36v5Bhcnc2nTxXgqNY6zbatP219awMtlFKNbbddbIO4RKWUn9baPqNYKfU0sNW2/Q+VUinAI8BOW5e/tNa3Jhk9D4xVSoUCuwB1+39Sa70MWAZwtHLHez75TNreo/g+3pikX8LxrBdERly8ve3m4eO4B1bAuZgf5qQUvOpV4/rXGznRZoi9T5Ww5fw9MO+htYKUFBmDf7uGXFm3C9/gqqTG/G1vSzl4Cu9q5XHx98V0IxXfBlU5v3oLNyJj8H+8PsnRJ/BvU48bu2MMzRwfFUf1J4I5uCGC8vWrcCH2tL3t1zlf2q8/MbIHyZdv2A/zVGleK9/DOYWpUkA5Es6c40ZSMl6eHuw9cJhB/Xpw7sIlduyKpHaNIP6IiCS4rmHTSwGoF1CSsKOnebJuJQ4mXKJqKX97m5+XO+6uzri5OKOUwtfTjeSbGfh5uuPjYZ3F4O/jQYqBE+lPRMVQ94mGRG3YRaX6VTkTm70ffz/nC/v1ziN7kXT5OkfC9tN+WDcSz18j4scdZKRlWKvOBjoRFUOdJxqyd8MuKtavytkcmX/IkblTjsxvtc4eXM4KX8QHA2YamtnRnnuHIg/TrO2j/L4+jJrB1Tl57JS9rXzlcrw8cTBvDpmKKctEVkYWFouFg3sO06RNY7b/8gdValTi4tlLhmY+HHmYpm0fZdv6MGoEV+fUseyjMuUql+WliYOZPGRarsyH9hyiSZvGhP3yB5VrVOKSwZn/jQd5LppRCnLwthaYqJRqorWOAFBKVQHKAp8DHbTWx5RS04EA2zo5/yQfAs/e1ucEUE0p5Ym18tYIiLFdzmit37G1TQISgVXAVKXUWK21th16nQcEAZ8AlbTWyUqpVWQPzHJmGAK8rLW+qZTaCDQFwu7XAwSQvGkX3s3rE/Dt+wCcm/AB/i90IzPhPClbd3Pp/VWUXzkDgKQNf5ARVziHPnK68sseirasQ931M1FKETtyEY+81In0vy5wbVMUf81aTe011gHl5fV/khZzmpsJFwn6cDh1185AZ5k49soCQzMf2RhJ1Ra1Gfb9dFDw7biltHixA1cSLnJsy947rleiUhmOhxs3if6fbNi0jbT0dHp17cD4EUMYOmoSWmue7tiOkiWK0/vpjkyaOZf+r4zB1cWVd6cZexikTc0AIuLOMWDRetCa6c+05PMdhyj3kB+ta1Ygotw5+i9cj5OCegGleLTqI1QpWYzp34Xzza5jmMwWpvRoblje6I17qNGiDhO+t+7HK8ctou2LnbiUcIEDW6LyXSf8m228MHc4zXu3wcnJiRXjFufbr6Ds37iH6i3qMD5H5idsmQ/eIXNhc7TnXtiv4YS0bMBHa/+DUjBr1Lv0HtqTs3+dI3zznxw/epJl6xeitSbi9z3sjzjIkX3HGDt7JMvWLwQU702cb2jmHb+G07BlAxav/RCUYs6od3lmaE/O/nWWnZt3ceLoSZas/w9aw+7f93Ag4iBH9x1j9OzXWbL+PygUcyd+YGhm8e8orQvuTMVKqQBgDtZDpS6ACQgFqgEvAxeBM0BxrXVbpdQFrXUp27qj79DneeBV4BrWitxC4DvgY6AC4Acs1lp/rJRyBmYAbYAs2+V126HYecBTWAd5F4GrwCzgK611E1uGwcDrwGWslbohWuubd/r//i+Vt8J0JdXYeWf3wwYPxzu7zcyoWYUd4Z6Ydn5X2BHu2WuvRxZ2hHvmaGdIL+qAZ5YKz3pwpjv8t5zzHuB54O04u9XQ0FeebGXYe23xjWEP5B+kQJ+NWut4oE8+Tb9grYDd3r9Ujuvzbu+jlHIBymitG9pu7wBOa60zgDzfmddam4E375BtNDA6n6YmOfp8grVCJ4QQQgjxQHCoj1Jaa5NSylsptQ/IBHYDfxRyLCGEEEIYROa8OdjgDUBr/SZ3qKYJIYQQQvz/ztGmXQghhBBC/J/mcJU3IYQQQvzfJYdNpfImhBBCCOFQpPImhBBCCIchlTepvAkhhBBCOBSpvAkhhBDCcegH8ry5hpLKmxBCCCGEA5HKmxBCCCEchsx5k8qbEEIIIYRDkcqbEEIIIRyGtsicN6m8CSGEEEI4EKm8CSGEEMJhyJw3qbwJIYQQQjgUqbwJIYQQwmFoOc+bDN7up5uZjvVwXlJuhR3hf+B49XLTzu8KO8I9cWnWs7Aj3LNy+kBhR7hnjvb2c5CUwo5wzzyUY70mAySa0wo7gnAAjrdnCyGEEOL/LJnzJnPehBBCCCEcigzehBBCCCEciBw2FUIIIYTDkJP0SuVNCCGEEMKhSOVNCCGEEA5D68JOUPik8iaEEEII4UCk8iaEEEIIhyFz3qTyJoQQQgjhUKTyJoQQQgiHIZU3qbwJIYQQQjgUqbwJIYQQwmHIt02l8iaEEEII4VCk8iaEEEIIhyFz3qTyJoQQQgjhUKTyJoQQQgiHobVU3qTyJoQQQgjhQKTyJoQQQgiHoS2FnaDwyeCtsClFuVkv41kjAJ2Zxd/jF5IRf8He7Nc6mNKj+gCQdvgkpyctxcnXi4oLRuHk64VydeHs28tJ3RdraOb6c56naI3yWDKziBrzCanxF+3NdWcMoHijQEwp6QDsHDQPbbIQHPo83uVL4OTqQvSkVSTuP2VgZEW3mS9Qunp5TJkmvp+wjKsJF/P0eX7FeI5s3svu1Vto/UoXAlvVBcDTzwvfEkWZGfKKIXktFs07P/5J3PmruLo4M7VnC8oX97O3rwo7xG/7T6KUYnCburSpFUByeiYTv9xGemYWrs7OzOrbiuK+XobkzengkRjmLVnOyoXv5lq+PTyCJSu+xMXZmac7taNnl/bczMhg4vT3uJZ4HW8vT2ZNHoN/saLGhVWKDjOfp1SN8pgyslg/4RMSb9svUIp+K8cRu2kve1dvxaOIN08vGIa7jyfpiSmsn/gJaVeTDM1b0pb35zvk7WvLu8+Wt1uOvD8bmRfr82rwzJcJqBFAVkYWH01YyIWEC3n6vLHyLSI37WHz6t/syxs92YRHOzZlwWvzDM37+jsjqFyjEpmZWcwdN59z8efs7V0HdqZdr3aA5vP5q4nYups+r/YmpHVDAHz8fPAvUYxewX0MzfzGnDEE1qhCZmYWM8bM4XT8WXv7M4O607l3e7TWfDxvJX9s+dPeFlClPKs2LKNtnS5kZmQalln8OwV62FQpVUkp9Z1SKkIp9btSaoNSqmZB3mc+GTyUUheUUuOMvN//VtEnG+Pk4Upctwmcnf0Zj7z1gr3NyduTRyYP4sSgGcR2HU/m6Uu4+PtRckhXknYe5HivSSSM/pByM18yNHOZ9g1wdndlW+dpHJr1NXWnPpurvVidAP7oO4ewHrMI6zELU3I6QcM6ciPmDNu7zWDv2E/wrVLG0Mw12jXExd2Vxd2n8lvoGjpOfi5Pn3Zjn8GzqI/99vYl61jWZwbL+szgxvlrfDNmiWF5tx1JIMNk5rPhXXi9fQjzft5tb0tKz2DNziN89mpnPhr8FO+tiwBg3d44qpQqxvJXOtGubkVWbT9kWN5blq/+lqlzFuR5E8gymQj9cBnL5s9i5aJ3+Xbtr1y5eo2vf9xA1coBfLbkfTq3f5ylq74yNG+1Jxvg4u7K8qensTX0a9pNfjZPnzZje+FZxNt+u8XwrpyOjGVlz7fZs3IjbcY/Y3jeFU9P4/fQr2mbT97Hbsvb3JZ3Vc+3iTQ4L0DIk41xc3dl0tMTWB36GQMmv5CnT5+xz+JTxDfXsuenDqbf+P4oZezsnmZPNcXN3Y0RXUfyyexPefmtofY2v2J+dBnQmde6jWRs7wm8Pvs1AL5a9DVjeo1jTK9xXDl/mdBR7xma+bH2LXBzd2NQ55f5z6yPGDV1uL2tqH8Reg16muc7v8zLvV7njTlj7G3ePl6MmjqcrMwsQ/OKf6/AnhVKKS9gHTBXa91Ea90GmA4sKqj7vIMewFfAIGX0q8B/wbtRDZK2RwOQFh2HV50q2W0Nq5Eek0DZt14g8Pt3yLpyHdO1JC59so4rqzcCoFycsGQY+8Qr3iiIC9sOAHBt3wmK1a2Y3agUPhVL0eC9wbReO5WAPq0AKNm6DpYsE83XTKD6qKe5uO2goZkrhgQRF2bN/Hf0CcrWrpSrvXb7RmiLJnb7/jzr1nwyhPQbqcTtMC5zdPwFmgU9AkCdCg9z5MwVe5unmyuli/qQnmkiPdOEUtbJu1VL+ZNm2xdSb2bh4mz87l6uTGk+eGdynuWn4k9TvmwZivj54urqSnCdmuw9cIR9B47QvHEDAFo0CSEiMtrQvOVDgjhp2y/ORp+gdJ2Kudqrd2iE1poT2w/YlxWv+oj99umoOMo3DDIsb7n/Me/JHHnLGZgXoHpIDaLDrH/X49FxVM7xGgfQpENTtNZEb9+ba3ns3hg+nvyRYTlvqR1Si8jtUQAc2xdDUN1Ae1tSYhJD2r2M2WTG/+FipCSl5Fq3eftmJN9IISos9/+loNVrVIc/t1k/4B3ad4QadavZ265fu0GfxwdhMpl56OGHSM6RefJ741k4exk3028amvffsmhl2OVBVZCv7p2B37XWu24t0FrvAR5TStVSSm1SSm1RSkUppZoCKKUSlFIblVIf/EOfF5VS0UqprUqpX5VSg5RSrkqpT5VSO5RS4Uqp1jlyDAZWAAeADrZttFZK7VZK/aGU6q+UamVbL0wptdy2PT+l1De2DPuUUgVyvMzZxwtzUmr2ArMFbG+6LsX88H20Nmdnr+JE/7d5+MUuuFcsgzkpFX0zE5cSRQlYMJpzoZ8VRLQ7cvXxxJScbr+tLRbUrcxe7pxYvok9wxcT3i+USoOeoEj1crj5++JWxJvwvqGc27yPOlP7GZrZ3ceTm8lp2ZnNFpxsmUsGlqVe12Zsnvdtvus+NqwrWxZ8b0jOW1JvZuHj4Wa/7eykMJmzJ3qULOpN97nf02fBT/RtZi1mF/FyZ1fcWbq//z2rwg7RLSQwz3YLWtvHmuPiknc2RmpqKj7e2dUgby9PklNSSU1Lw8fH274sJTU1z7oFyc3Hk4yc+7I5e18uEViWWl2bsm3ud7nWuXgkgcAnrAPOwLYNcPV0wyjW/fif825/gPICePp4kZac/Xe15HjulQssT/OuLfl67pd51vvz53B0IZxK38vXi9Qcec058oI1f9dBXVi47kN2bPgj17p9X+3DZ/O/MCzrLd4+3qTkzGyx4OzsnH3bbKb3891Z9fNStv68HYCXxrxA+NZdHD96wui44j4oyDlvFQH7XqGUWgsUAUoD7wBjtNaHlFL9gOeBP4FyQLDW+qpSqvftfZRSccAEoB6QAWyzbX4wcEVr/aJS6iFgB1BTKVUV8NZaH1BKLQfGAD/b1vHQWjdW1rJFLNBca31JKTUDGATsBb7SWv+glCoDhAF5jpsppYYCQwEmFa1Dd5+Ae3qQzClpOPl4Zi9wUtYBHGC+nkTageOYLl8HIGX3ETxrViTjr3N4VKtAxYVjOTtzBSkRR+7pPv+trJR0XLw9shcoJ7Qtsyk9gxMf/4Y53XrY7HL4UYrUrEBmYgrnNlk/jZ7ftI9qw7sYmjkjJR137+zHWTkpLLbMwd1b4lfKnyFrJlOsbAnMmSYSz1wmLuwAD1d5hJtJaXnmxxU0bw9XUnNUVC1a2ytpO2NOcyUpnQ0TrYe/hn2ykXoBJVmx/QCDWtehZ5NqxJ2/xtjPt/Lt6O6G5r4Tb29v0tKyB8+paen4+Xrj7eVFWlq6fZmvj8+dNlEgMlPSccuxLyun7H25bo8W+JUsxoA1b1K0bAnMWSaun7lM+OJ1PDVtAM+tfoOTYQdIOn/NsLzW/Tj/vHV6tMC3ZDH658h748xldi5ex5PTBvBsIeQFSE9Jw/MOz71WPR7Dv+RDTF0zgxJlH8aUZeLymYvsDzO2AptTWnLuvE458t6yduU6Nqz+hdmfz6Je07rs//MAFaqWJzUpNdf8OKOkpqTi7Z09v9VJKcxmc64+X6/4ge+/WMfC1e/TsGl9OvRox8Xzl+natxMPlfBn8VfzGPz08Ns3/UCSU4UU7ODtNNDw1g2tdVcApVQEcBJ4SymVDvgCt2bPXtFaX7VdP5tPnyrAUa11mm1bt2Zd1gZaKKUa22672AZxgwFvpdRvgAKaKqVu1exvzfAvgXVA+Y3t8JMnsAnYAIxUSnW33bdrfv9JrfUyYBnAvnJd7/ljYmrkMYq0DeH6zzvxqh9IekyCvS3t4Ek8girgXMwXc1Iq3sFBXFmzCY+q5ai0ZDx/DXuP9GPx93qX/9rVyDhKtw3mzPrd+AdXISnmtL3Nt3JpGi8ZzpZ2k1BOThRvFEjCNzu4uieW0o/X4/rBeIo3qU5S7BlDM8dHxVH9iWAOboigfP0qXIjNzvzrnOxP/U+M7EHy5Rv2Q6xVmtfK91BqQasXUJKwo6d5sm4lDiZcomopf3ubn5c77q7OuLk4o5TC19ON5JsZ+Hm64+Nh3U39fTxIMfhw+j+pFFCOhDPnuJGUjJenB3sPHGZQvx6cu3CJHbsiqV0jiD8iIgmua+iUWP6OiiPw8WCObtjNI/WrcCnHfrFl9hr79VYju5Ny+QYnww5StU09Dv4QTvyuo1RrH8LpqDjD8p7+h7xbc+RtmSNvFVvehELICxATdYyGj4ewa8NOqtYP5O/Y7Ne4L2avsl/vNbIP1y9fL9SBG8DhqCM8+kQTwn7eQfXgavwVE29vK1upLIPfeIFpQ97GlGUiKzMLi8X2IbBFMHu2RRZK5v2Rh2jZthmb1/9O7eCanIjJ/jJYhcrlGPHmy4x9cRKmLBOZmVlYtKZr0+wvVPy851uG9RldGNHF/6ggB29rgYlKqSZa6wgA28CpLPA50EFrfUwpNR0IsK2T8+PNh8Czt/U5AVRTSnlirbw1AmJslzNa63dsbZOAZKAPUF9rfc12/5OAYVjn4t26ryvAGaCr1vqGUqoLkAKMBXZprZcopR4DOt7fh8fq+m8R+LaoR+CPoaAgYcyHPDykCxnxF7ixeQ/nQj+n6hfTAEj8eSc3Y/+m0qdvotxdKTt9MADm5DROvfhOQcTL19lfoni4ZW0eWzcVlCJq1FKqvtSelL8ucn7TPv7+4U/abJiOzjKT8F04SXFnOfbhWhrOHcJj66dhMZmJHGHc5H+AIxsjqdqiNsO+nw4Kvh23lBYvduBKwkWObbnz/JQSlcpwPNz4if9tagYQEXeOAYvWg9ZMf6Yln+84RLmH/GhdswIR5c7Rf+F6nBTUCyjFo1UfoUrJYkz/Lpxvdh3DZLYwpUdzw3PfbsOmbaSlp9OrawfGjxjC0FGT0FrzdMd2lCxRnN5Pd2TSzLn0f2UMri6uvDttvKH5Yn6LolLz2jz/w1SUUqwdu5Qmg9tzLf4icVv25bvOlZPn6Tb/ZQCSLySybvzHhucdZMu7buxSGg9uT+I/5L168jxdc+Rdb2BegD2/RVCneT1m/hCKUrBo7Id0GtyFC/EXiNqyx9As/43wX3fSoEUwH/40H6UU746eS88hPTgbf5ZdmyM4efQU/1m3ALRmz7ZIDkZYXx/KVSrL3j/y/xsUtG2/7KBJyxBWrFuCUoppo97h2Zd6c/qvM+zYtJO4IydY9fNStNbs/D2CfbuM/0B6P8nPY4EqyDkFSqkAYA7WypYLYAJCgWrAy8BFrAOn4lrrtkqpC1rrUrZ1R9+hz/PAq8A1rBW5hcB3wMdABcAPWAxcBZ7TWtuPG9kOfx4ABgIDtNZ9bMvbAVOwzgFMAgYANbEeJr1i21YtoIbWOuNO/9//pfJWmE6ZjD1EdT9EujveCX6mLahf2BHuiUuznoUd4Z7NbvBWYUe4Z4729nOQlLt3esBcM6ffvdMDJtGcdvdOD5h958MN3Z1jAjsY9l5bLe6XB/KpWqDnedNax2Otft3uFyDPiXtuDdxs1+fd3kcp5QKU0Vo3tN3eAZy2DagG5HM/P9y2/XNYD5PeynBr+Sash0pzuoR1kCmEEEKIB0QhfI/lgeNQJ+nVWpuUUt5KqX1AJrAb+OMuqwkhhBBC/H/DoQZvAFrrN4E3CzuHEEIIIYwnc97kh+mFEEIIIRyKw1XehBBCCPF/14P8ywdGkcqbEEIIIYQDkcqbEEIIIRyG/MKCVN6EEEIIIRyKVN6EEEII4TDkPG9SeRNCCCGEcChSeRNCCCGEw5Bvm0rlTQghhBDCocjgTQghhBDCgchhUyGEEEI4DDlViFTehBBCCCEcilTehBBCCOEw5FQhUnkTQgghhHAoUnkTQgghhMOQU4XI4O2+yjI7F3aEe5Ls5HhPgEwcr17+2uuRhR3hnpTTBwo7wj17Y++Mwo5wz7I+m13YEe5JSOiJwo5wz6p7lCzsCPfsaMqZwo4gHIAM3oQQQgjhMOTbpjLnTQghhBDCoUjlTQghhBAOQ+a8SeVNCCGEEMKhSOVNCCGEEA7D8b62dv9J5U0IIYQQwoFI5U0IIYQQDkPmvEnlTQghhBDCoUjlTQghhBAOQ87zJoM3IYQQQoj/SVBQUGPgIyAQ2AcMio2NPZlPv7HAaMAT+AUYHBsbmx4UFOQEzAP6A2ZgbmxsbOjd7lcOmwohhBBC3KOgoCAP4EfgPaAYsBlYmU+/Z4BXgGZAOaAEMMHWPAJoAlQFmgIvBwUFPX63+5bBmxBCCCEchsXAy108BlyLjY39MjY2NhOYBdQKCgqqdlu/IcD02NjYv2JjY1OwVtlW2tr6Ae/HxsZei42NPQEstPX/RzJ4E0IIIYS4d9WAmFs3YmNjzcBJoMZt/eoBvkFBQfuDgoIuAG8B5/PbBhCbz/p5yOBNCCGEEA5Dowy73IU3kHbbsjTA67ZlxYBBQCegNlAfeOMO28hv/Txk8CaEEEIIce/SsH4BIScvIOW2ZZnAh7GxsWdiY2MvA3OxDuTy20Z+6+chgzchhBBCOAyLNu5yFzFYv2UKQFBQkDNQBeuhz5zigCI5bjuTPf7KtQ0gKJ/185BThQghhBBC3LttQMmgoKABwFfAROBkbGzssdv6fQ6MDgoKWgukA2OB721tXwETg4KCdgK+wHDg9bvdsVTehBBCCOEwLCjDLv8kNjY2HeiI9XQfV4G2euPZAwAAIABJREFUwDMAQUFBR4KCgp61dZ0PLAfCgeNAFNbTiwB8CPwBHAT+BD6KjY1dd7fHQCpvhU0pAmYPxatGADozi1NjF5MRf8HeXOSx+pQd3RuA1EOniH9zmb2t2FON8e/8KCdf/cDwzI/OHoR/jfKYM0zsHPcJyfEX7c2N3+7PwyGBZKXcBGDrC/PISk4HoGTjIFotHMY3IXf9YHGfIyt6znyBMtUrYMo08fWEpVxJuJinz5AVEzi8OYo/V28BYGrEYq7Y/h7x++LY8O5XhuV9duZgylYPwJSZxaoJH3E54UKePiNWvMGBzZGErd6Mm6c7Qz58He8iPmSkZ/DpqP+Qci3JkLy2QHSY+TylapTHlJHF+gmfkHjbY4xS9Fs5jthNe9m7eiseRbx5esEw3H08SU9MYf3ET0i7amBm4OCRGOYtWc7Khe/mWr49PIIlK77ExdmZpzu1o2eX9tzMyGDi9Pe4lngdby9PZk0eg3+xogamVbg+/ixOJcqC2UTm5lXo65ftrS4N2uFSrRFaa0x7fsF8IhrcPHFv/yK4e4CTC1lh32A5f8q4xErxVuh4gmpWJTMjk6mj3+Hv+DP29r7P96Rb745oNEvmfkrY5p34+HoTung63j7euLq58u7UDzgQddiwvENmvkyFGhUxZWSxZMJCLiScz9PnzZVTiNy0m02rf8PN3Y3XFoymyENFSE9NZ+HoD0gy8LmnlGLO3CnUqBVEZmYmY0ZMIf6vv+3tQ4cNoGv3DgBs3byDeaGLKVq0CAuXheLr6821xBuMfW0KV69cMyzz/y9iY2P3AiH5LK+Z47oFmGm73N7PhLUSN/Ze7ve+Vd6UUnOVUtuVUjFKqb9t17+9Q98ApVSn/Nps7VWUUuG26+FKqd227e1RSk3/lznrKqWa264HKqV+UUptUkptUUq9o6xclFIZtvu8dfnPv7nfOyn2VCOc3F052uUNTr/zBRWmDrK3OXl7UP6tgcQOnMWRzhPJOHMJF38/ACq8/QLl3nwW5WR88bTCUw1wdndlQ5fp7J39FY2m9MvV/lDtADb1C+W3XrP4rdcs+8DNu4w/tV7qgHJxNjxzrXYNcXF3Y0H3Kfwc+iVdJvfP06f92N54FfWx3y5eoSRnD//Foj5vs6jP24YN3ADqtQvB1d2NOd0n8UPoap6ZPCBPn25j++CdI2+Lvo+TcOgU7z4zhcj1O+k4oodheQGqPdkAF3dXlj89ja2hX9Nu8rN5+rQZ2wvPIt722y2Gd+V0ZCwre77NnpUbaTP+GSMjs3z1t0yds4DMjMxcy7NMJkI/XMay+bNYuehdvl37K1euXuPrHzdQtXIAny15n87tH2fpKuP2CQDnKvVQLq5kfDWHrPAfcG2Z4/Fy98SlfhturplNxvfzcW1t/dDn2qAt5r+PkfHN+2RuXIFbm3532HrBeLx9K9zd3Xi242Dmz1rMuOnZH9yK+hehz6AePNtpMC/0GM5bodbzlg58uR8Rf0Qx6OlXmPTa20yePc6wvI2ebIKruxuTnh7PF6GfMXDyC3n69B37HD5Fsp977fq35++YBN7q9QZh32+jxwhj9+P2nR7H3cONzu36MWvaPKbOGm9vK1+hLN17daJzu350atuXVo81pXrNQF4bM5Q9Efvo2r4/y5eu5o0pIw3N/G88QN82LTT37Z1faz1Ga90amAN8qbVurbXudYfuT2A9o/B/61nbtpsATyql6v2LqL2wnlcFrFnnaa3bYS131iL7GyCXbf+HW5cR/+I+78i3UXWub48GIGVfHN51Kme3NaxGWkwC5acMovqPM8m6fB2T7dNcclQs8ROX5bvNgvZwoyDObjsIwOV9J3moTsXsRqXwq1iKZu++SIefplC1d0sAnN1deXTOC+x6c2UhJIZKIdWICdsPQEL0CcrVrpSrvW77xmiLhWPb99uXla1diSKl/Bm25i2GrJhAiUqlDctbNaQ6h8Os+8Wp6ONUqF05V3tw+yZoi+awbd8B2Lr8FzYs/AEA/zLFSb583bC8AOVDgjgZdgCAs9EnKJ1zvwCqd7BWhE5sP2BfVrzqI/bbp6PiKN8wyLjAQLkypfngncl5lp+KP035smUo4ueLq6srwXVqsvfAEfYdOELzxg0AaNEkhIjI6DzrFiSnR6pijrdWoCznT+FUqkJ2Y1YmOukauLqjXN1BW2dbZ+3bjOnQDtsGnNHmLEMzBzeuS/i2CAAO7j1MzbrZ5y+9fu0G3ds8h8lkpvjDD5GclAzAZ0vX8M1nPwLg7OJMxm2D64JULaQ6+8P2AXA8OpZKdarkam/SoSkWbSF6+z77suohNYi2rRO9fS91mv+bt6h716hJMNu2hAOwL+ogdevZiz6cO3uBfj2GYrFY0Frj6upCxs0MAoMq8/uWPwCI3L2Pxk2CDc0s/p0CL9sopT6wVc52K6WGK6XcgHFAf6VUR6VUG6XU77bLLqVU5X/YnDvWb2mcV0qVzFEVC1dK1bBV7P5USn2vlIpSSo1WSq1SSh1USr2tlCqP9czG45RSDYAE4AWlVFOsh5B7AD8X7COSm7OvF+ak7FO8aIsFnK1/Fhd/P/ya1uL0rM+JfXYmpYZ0wsM2gLi2bida3/2rMAXBzceTzOTcmdWtzF7uHFuxibARS9j07LtUG/gExaqXo8nMgRz+aANpFxILJbOHjyfptgoggDZbcLJlLhVYluCuzfhtXu5CcdKlRLYs/onFfWewZdFPPDd/uMF5sx9jS468ZQLL0bhrc9bO+zrPetpiYcyXU2kzsD2Hths7sHDz8STjtsf41n5RIrAstbo2Zdvc73Ktc/FIAoFPWAdDgW0b4OrpZlxgoO1jzXFxyTt7JDU1FR/v7Aqht5cnySmppKal4ePjbV+WkppqWFYA5eaBzsh+jLFYQGW/jOuUa3gOnI7Hc5MxRW+1LsxIB1MWePnh3v5FssJ/NDSzt683yUnZZz6wmC04O2dX381mM/1e6MmaXz5l0/rfAUhOSiHjZgbFS/gTumg6H8xabFheTx8v0pKz/645n3vlAsvTomsrvp775W3reNrXSU9Jx8v3rqfpuq98fH3u+BibTCauXbN+kJsyYxyHD8Zw6mQCRw7F0K79YwC0a/8Ynp63n/HiwfUA/cJCoSnQOW9KqW5AGawVM1esk/F+xzpRL0BrvUEpNQLoq7W+qJSaAvQk+1sYt6xWSqUDlbD+8Os1oANwBXgO60nvigCXgcrAU4Af1q/blgUygJNa6ylKqc+BeK31XqXUYeBVIBRr1W091omHqUAJpdT2HBlGaq33cxul1FBgKMDEIvXo5lXx9i7/yJychrNP9pNGKScwW3cZU2IyqQdOkGWroCRHHMWrZkVunjqf77aMkpmSjmvOzE5OaFtmc3oGRz7ZiPmm9ZPy+Z1HeahWACUbB+EbUBJGgXtRH1otfpWwYYsMy3wzJR0Pb48cmRUWW+aQ7i3tFTb/siUwZZq4duYyJ3cfw2I2A/BXVCxFShUzOG/2Y+yUI++j3VtRtJQ/Y9ZM5aGyJTBnmrhy5jJHbJXFuf2mU6pyGUYsf4NJrQqkYJyvzJR03HI9xtn7Rd0eLfArWYwBa96kaNkSmLNMXD9zmfDF63hq2gCeW/0GJ8MOkHT+wZhz4+3tTVpa9uA5NS0dP19vvL28SEtLty/z9fG50yYKhM68iXLLfoxRTqCtj7FzQC2UdxHSP7We+9O9x0gs505guRCPKv4I7h2GkrnjWyxn4gzNnJqcirdP9mBGOTlhtj2vbvly+Xd8+/lPfLTmAxo1a8CenXupWr0y7380k/emf0jULuM+iKSnpN3xudeqRxv8S/ozbc1MSpR9GFOWiUtnLpGeko6nbR1PH09Sk4wd1Kckp+Dtk/1hQzmpXI+xu7sb8xbOJDUljYlj3gbgw/nLmBk6ia9/+pRtW8I5e7Zw31fEvSnoLyxUB/7Q1hJRplJqt21ZTmeBRUqpFKwDre35bOdZrfUJpZQT8BkwBusAsDKwDusJ8GbY+p7QWicppSzAea11IoBSKr+D16211vOAeUopH6zfCHkTmITtsOnd/oNa62XAMoDdZbrfcyksOTKGYm0bcm39n/gEB5IWk2BvSz14Es+g8rj4+2K6kYpPcCCXbBPpC9OlyDjKta1P/PrdlAiuTOKx0/Y2v0qlab3kVdY9ORmcnCjZKJAT3/7BDy2z56z0jl5o6MANrIOvmk80YP+GCCrUr8L52OzM6+dkf4p+cmRPki9fJybsAJ0m9iMtMZnfl66nTPXyJJ67aljeE1Ex1H2iIVEbdlGpflXOxGZPPv5+zhf2651H9iLp8nWOhO2n/bBuJJ6/RsSPO8hIy7APnIzyd1QcgY8Hc3TDbh6pX4VLOR7jLbPX2K+3GtmdlMs3OBl2kKpt6nHwh3Didx2lWvsQTkcZO7C4k0oB5Ug4c44bScl4eXqw98BhBvXrwbkLl9ixK5LaNYL4IyKS4Lo1776x+8hy7gTOlepijovCqXQl9JXsif86I81aYTObrLdvpoO7F8q/NO6dXiLj52W5+hsles9BWrdrzsZ1W6nToBbHj52wtwVULs/IScMY+cJEsrJMZGZkYbFYqBxYkXkfv8PYoZOJPXrc0LwxUcdo+Hgjdm3YSdX6Qfwdm/2a/MXslfbrz4zsy/XLiewP20e5wPIEP9aQEweOU791A47tOWpo5sjd0bR9qjXrf/qN4IZ1iLntMVv55ULCd+xm0YJP7cuaNG3It1+t5c8/9tCxS1sidxtbqf83HuS5aEYp6MHbMaAv8B/b4dJHgaVAQ7IP2S4DKmitU5VSq+HOfxWttUUpdRZww/qDsKe11u2UUi2wfovjFeBuAyhLjvuep5QarrXeprVOUUodBwz9KJ34626KtKxLjXXvAIpToxdSamhnbsZf4PqmSE7P/oJqX04B4Or6P0nP8SZeWBJ+jaJMy1p0XDsFlCJ81DJqDm1P0l8XOb15Hyd/+JOO66ejTSZOfBfO9bizhR2ZQxsjCWpRm9e+fxulYM24j2j1YgeuJFzkyJa9+a6zdfFanvvgVaq3qY/FZGHN2CWG5Y3euIcaLeow4fuZKKVYOW4RbV/sxKWECxzYEpXvOuHfbOOFucNp3rsNTk5OrBhn3KEmgJjfoqjUvDbP/zAVpRRrxy6lyeD2XIu/SNyWffmuc+XkebrNfxmA5AuJrBv/sZGR89iwaRtp6en06tqB8SOGMHTUJLTWPN2xHSVLFKf30x2ZNHMu/V8Zg6uLK+9OG3/3jd5H5uPROJWvgXufCYAic+NKXILboq9fwnzqAJYL1XHv+wZoba26JRzFrcur4OyK22N9ANAZ6WSuM+7D05ZftvNoq0Z88fPHKKWY/PoMBr7Ul7/jz7Bt4x/EHjnOl798itaa8K27iNoVzX9WvYe7uxsTZ44CICU5lREDjfnSwp7fIqjbvB6zfggFpVg0dgGdBnflQvx5orbsyXedjZ//woh5o5jx3RxMWSYWvPa+IVlv+WX9Flq2bsq6jatRSjHq1Um89OpA/jr1N87OTjRpFoKbuxtt2rYA4J3p8zl5PJ4PP5oNwIXzlxg9Iu/cT/HgUvd73pRSahBQTWs90Vbtmgc0xjpfbY3W+n2lVENgNTAZaIH1CwyJwCXgAtafjliptW5u+9apK9afkFBYfzaiP9aB59eAB9YB2TQgPsd6PsB+rXUVW64LWutSSqkuWL+o8DLW87IsAIoCWcAJrAPAm1gPrZa9l//7/1J5K0xHlbHzMu6Hg66mwo5wz1Iw373TA6ScNnbe2f3wxt4Zd+/0gMn6bHZhR7gnIaEHCzvCPavuUbKwI9yznTdO3L3TA+b89aOGlsJ+K9nHsPfapy5+9UCW+e575U1rvTLHdQ2MyqdPFNafgADI93QiQHNb3+b/cHdt/mG9FKw/U3HrPkvZ/l2H9VDrLU/cYdv3NHATQgghhDCC/MKCEEIIIYQDkV9YEEIIIYTDeJBP4WEUqbwJIYQQQjgQqbwJIYQQwmHIqUKk8iaEEEII4VCk8iaEEEIIh2GRwptU3oQQQgghHIlU3oQQQgjhMCwy500qb0IIIYQQjkQqb0IIIYRwGA71O5QFRCpvQgghhBAORCpvQgghhHAY8gsLUnkTQgghhHAoUnkTQgghhMOwKPm2qVTehBBCCCEciFTehBBCCOEw5NumUnkTQgghhHAoUnm7j0wWxxoLn/RwvO/stLrpWI8xwK8e5sKOcE8ccTZJ1mezCzvCPXMd8EZhR7gn5ee/WtgR7lmSJbOwI9yzlkUCCzuCcAAyeBNCCCGEw3C8ssP953hlDCGEEEKI/8Ok8iaEEEIIh2FxxLkd95lU3oQQQgghHIhU3oQQQgjhMCwO+bWq+0sqb0IIIYQQDkQqb0IIIYRwGHKSXqm8CSGEEEI4FKm8CSGEEMJhyLdNpfImhBBCCOFQpPImhBBCCIchv7AglTchhBBCCIcilTchhBBCOAz5tqlU3oQQQgghHIpU3oQQQgjhMOTbplJ5E0IIIYRwKDJ4E0IIIYRwIHLYtLApReU5Q/CqWQGdaeLE6CXcjL9gby7apj7lx/QCIOXQKU5N/MTe5t++EcU7P0rcsAUGR1Z0nvk8papXwJyZxY8TPuZawsU8ffqvGMexzXuJXL0Vd19Pev9nBG6e7pizzHw7ahEpl28YGZq6c56nSM0KWDKziB79Manx2ZlrzxzAQyFBmFLTAYgYOJfq43pSpFYFANxLFCUrKZUdHacaFFfRd+ZgylUPICszi88nfMTlhAt5+gxf8QYHNkeyY/Vm+/KSlcvwxo+zGRsyGFNGliF5bYHoMPN5StYojykji58nfELibfsFStF35ThiN+1l3+qteBTxptuCYbj7eJKemMLPEz8h7WqSUYFxffxZnEqUBbOJzM2r0Ncv21tdGrTDpVojtNaY9vyC+UQ0uHni3v5FcPcAJxeywr7Bcv6UQXmzHTwSw7wly1m58N1cy7eHR7BkxZe4ODvzdKd29OzSnpsZGUyc/h7XEq/j7eXJrMlj8C9W1LCsSilenfUqlWpUIisziw/Gf8D5+PP29k4DO9G2V1u01nz5wZfs2boHL18vJi6aiIeXB6ZME++9/h6JlxMNyzti1nB73vnj53MuR97OAzvTzpZ39Qer2W3LO2nRG3h4eZCVaSL09XcNy3sr84szX6JCjQCyMkwsnbCQi/m8XkxYOZmoTXvYsnqjfXnIk41p0rEZ/3ltnmF5/y05VYgDVN6UUo2VUtv/ob28Uqqz7fo0pVScUmp7jksjpdRKpdRT+azbSCm1SSm1WSm1VSk1xrY8QCmVdNt2phTE/8+/fSOUhyuHOk0ifuYXBEwbaG9z9vYgYEp/jvafzcGOb5Jx+jIuD/kBUHHG81R481lwMv5PWL1dQ1zcXVnWfSobQ7+i/eRn8/R5YuwzeBb1sd8O7tmKizGn+aT3DA79vIvmQzsZGZnS7Rvi7OHKjk5TOTLzK2pNy525aO2K/Nl3DuHdZxLefSam5HQOTfmc8O4z2fnMbLKS09g/5pM7bP3+q9cuBFd3N0K7T+LH0NX0nDwgT5+uY/vgneMxBvDw8aTXpIFkZRo4aLOp9mQDXNxdWfH0NH4P/Zq2+ewXj43thWcRb/vt5sO7cjoyllU93yZy5UbajH/GsLzOVeqhXFzJ+GoOWeE/4Noyx327e+JSvw0318wm4/v5uLbuDYBrg7aY/z5Gxjfvk7lxBW5t+hmW95blq79l6pwFZGZk5lqeZTIR+uEyls2fxcpF7/Lt2l+5cvUaX/+4gaqVA/hsyft0bv84S1d9ZWjeR598FDcPN0Z3G82K2SsY8tYQe5tfMT869e/E6G6jeaPPGwx/ZzgAbXu1JT4mnvE9x7Nj/Q56vNzDsLxNn2yKm4cbI7uN4tPZyxn61tBceTv378TIbqOY0Gcir70zAoB2vdryV0w8Y3qOI2x9GL1e7mlYXrAOwFzd3Xjr6YmsCf2M/pOfz9On99hn8Snim2vZwKkv0nd8f5yUTCJzNA/04E0pNR74BPD4h25tgGY5bs/TWrfOcdnzD+suBF7TWrcFngL6KKXq29qO3radt//N/+VO/BpV4/rv+wFI2Xccn7qV7G2+IUGkHfubitMGUuunGWRevo7JVpVIjorl1MRlBRHpriqEBHE87CAAZ6JP8EjtSrnaa7ZvhLZYOL79gH3ZxZi/cfPxBMDdxxOLyWxcYOChRkFc/N2aOXHfCYrmeJxRCu9Kpaj33ou0WDeV8n1b5Vq30otPcnn7IZJiThuWt0pIdY6ERQPwV/RxKtSunKs9uH0TtEVzeHt0ruXPzX6Jn977ksybGYZlvaVcSBAnw6x/87PRJyhdp2Ku9uodrFWsEzn2i+JVH+Gk7fbpqDjKNQwyLK/TI1Uxxx8GwHL+FE6lKmQ3ZmWik66BqzvK1R209eQEWfs2Yzq0w7YBZ7TZ+EFyuTKl+eCdyXmWn4o/TfmyZSji54urqyvBdWqy98AR9h04QvPGDQBo0SSEiMjoPOsWpJqNarJ3+14AYqJjqFqnqr0tKTGJYU8Ow2wyU6xEMVKSUgCIj4nHy8cLAC9fL8xZxr1e1GpUk6jtUfa8gbflffnJV/LN62l7ffPy9cKUZTIsL0BQSHUOhO0D4Hh0HJXrVMnV3rjDo2htYf/2fbmWx+2N4dPJHxmW836xGHh5UD3QgzfgJND91g2l1DCl1G6l1C6l1HtKKWdgItBPKdXlbhtTSg1SSu1QSoUrpR4HEoDhSqkGWP9OzbTWhr6yufh6YkpOy15gtoCz9c/i6u9HkWY1iZ/xBUf7zaLMkE54VCoNwJW1f956PzGcu48nN3NktpgtONkyPxxYljpdm7J13ne51km7nkLVFrV5bfO7NH+pE3u/3m5kZFx8PcnKkVmbLShbZhcvd059upG9wxezq28oFQe1xa96OQCUqzMB/dtwfMnPhub18PEk/ba8tx7jMoHlaNS1OevmfZ1rnU4je3Ho932cOZZgaNZbrPtFuv12zse4RGBZanVtyva5ufeLi0cSCHzCOrAIbNsAV083w/IqNw90RnZeLBZQ2S+JOuUangOn4/HcZEzRW60LM9LBlAVefri3f5Gs8B8Ny3tL28ea4+KSd8ZLamoqPt7ZVU1vL0+SU1JJTUvDx8fbviwlNdWwrABePl6kJmXfZ87Xi1u3Ow/szPx18wnfEA5YB0nBLYNZunUpPV7qwcavNubZbmHm7TKwMx+u+4A/cuRt0DKYj7cupddLPfnNwLy3Mqfd4TW5XGB5mndtyTdz1+RZb9fPOwvtfUT8Ow/0nDet9fdKqYAci54HRmitI5RSrwAKmANU01qvU0oFA6OVUn1s/Q9prUfcttlErXVXAKVUJPA6sASoDHyplBpr61fjtsO1z2qtz96eUSk1FBgKMM63Pl29Kt3e5R+Zkv8fe/cdHkXV/n/8fdIrVaRIb4EAgQQIvRfpSJOmAlItKF2ULqAQH4qKIlUsCM8DooD0DgECCS3UUEMHkZZKyu75/bGbTUIRIzDJ/r7367pykZ0zM/vZYXbm7H1mNvE4eqUpLDo4WDpwQNLdaGIOnyPp1j0AokJO4Fm+KA/OX3/cqgyTEBOPq2dqZuWgMFsz+7evQ7Z8uXh7yShyFMyDKTGZe1duUaVrQ3bNWU3oL1vJW6YQXWcPYlbzkYZlTo6Ox8krfWZtzZwcn8D5eesxxVuGof4KPk72ckWIOnmZl+tW4HbIKZLTdEqM8CAmHjdP93R5U7Zx9fb1yJEvF4OXjCO3dRvfvnKLaq/V5e6N29Tq3JDseXIw6MfR/KezMdfoweP2CwfbNvbrUAfvvDl5c8knlv0iKZn7V26x+9tVvDr+Lbov/phzO44Qdf2OYXl14gOUS5r3nnIAbcnrWLQ8yjM78Qs+BsC1wyDM185ivhGJeukVXFv0I3HnMsxXThuW92k8PT2Ji0s9gcfGxZPN2xNPDw/i4uJt07y9vJ60ihciLibOVpUCcHBwsO3LKVb/sJp1v6xj4o8T8avhR5tebVg2exnrFq+jaJmijJ47mnebvpspedO+91Ks+mE1a39Zx+QfJ1Kxhh9te7Vl2ezlrFm8lmJlijF27hgGNH3HkLwpmZ90vKjboQE58+ZmzJKJ5Cn4MslJSdy68idHdhhbgX2etIzyZu3O22P0AoYppaYCe7F03h42XWv9d3XgCACllBsQoLWeCExUSuUGFmLpiK3GOmz6tEBa67nAXIDd+Tpm+DNMdOgpcjatwu1Ve/EKKEXcqUu2tpjw83iUKYRTLm+S78fiXbk0NxdvzuhTPHcXwyIo0ziAY2v2UdC/JDcjUocTN0xJ/XTXcFAHom/d48yOcMq3qGarysTejsLV2/2R9b5Id0IjyNc0gGur9pEzoGS6IVCvEvmp+t1AtjX5BOXgQK5AHy79zzI0lqdOeW5uPfKk1b4wZ8NO4de4CgfW7KWYfymuRqTuFyum/Gz7vdWgTkTdusfxHYcZUz/1c8rk4G+Y+dYkQzNfDjtN6UYBnFizj1f8S/Jnmv1iy+ep+0XdQe2JuXWfczvCKdmwEuErgrm49wRlmlflcphxnSHztbM4Fq+I6XQYDvmLo/+6YmvTCXGWCpvJMvylH8SDqwcqV35cW/Un4Y+56ebPCooXLcTFK9e4HxWNh7sbB44co2e3Dly78Sc794ZSwdeHXSGhBFQsZ2iuE6EnqNakGrv+2EUZ/zJcOHXB1vZK8VfoNbIXk/pNIjkpmaTEJLTWxNyPsVWS7t++bxtCNcLx0ONUb1Kdnda8kacibW0Fixfk7ZG9+LTfRFteszVvbLSlWnfv9j1D8wJEhJ2icqOqhKzZTSn/0lyKSK2+L/78B9vvHQd14d6tu3bdcRMW9tZ56wsM0Fo/UEptAGpiGe7MyPCvOc2/Pyulmmmtj2mtbyulLgKGXix0e+1+ctStSIXVk0HB2UHfUKB/Kx5cuMGdjWEn4Q71AAAgAElEQVRcnPwL5ZZYrm/5a/Ve4gy87upJTm4Io2SdCvT7dTwoxYrhc6jZuwV3Lt7g1OaDj11m87RlvDa1H9XeaIyDsxO/j5xnaOZra8PIU7cCdVaPRynFwUFzKNG/BbEXbnBj40Eur9hNvbWfYk4ycXnZLqIjLEVWr5L5ubxsl6FZAQ5v2E/ZOn6M+HUSSikWDf+Gxr1b8efFG4RvDjM8zz9xan0YxWtXoOeKcSilWDVsDtX6NOdu5E1OP2G/uH3uOm1nDAAg+sZdVo8wbr8wnTmEQ2FfXLt8BCgSNyzCKaAJ+t6fmM4fwXyjLK5dPwatLVW3iydwafMeODrj0sBS3NcJ8SSu+sawzI+zZuM24uLj6dS2BSMG9qXf4FForWnXsil587xE53YtGTVpGm++MxRnJ2eCxo8wNN+e9Xvwr+PPtN+moZRi+tDptOvbjmuR19i3aR/nT5xnxsoZaK0J2xbG0ZCjXL1wlUFBg2j5VkucnJz48iPj7qjfvX4PAXUCmPHbdJRSTBs6jQ5923M18hohm0I4f+I8X66cgdYQui3UlndI0CBav9UKRycnZn4007C8AKHrQ/CrXZFPV0xBKZg97Gta9mnDjcjrHNgcamgWI2Tla9GMonQWH/C2Dpsu1VpXV0r1wTLMeQu4iqUzVxZYCowDygA3Hq68KaUWWefJh2WIdaR1ek3gCyydWA2EAoOBginPmZGs/6bylpnWuRl3fdHzUuVBZifIuHVuxl/U/iwKavvbL4Z+aGyl43lwfuvjzI6QIW3838vsCBlmssO/gpnT4e/uz8ua/nvxd0MHMr8t9IZh/7HvXv45Sw7SZvnKm9Y6Eqhu/X0+lrtP0zoE/O0talrrnk+Yvof0d6qmsD2nEEIIIbIOqbxl/btNhRBCCCFEGlm+8iaEEEIIkcL+BsOfP6m8CSGEEELYEam8CSGEEMJumLPkLQTGksqbEEIIIYQdkcqbEEIIIeyG3G0qlTchhBBCCLsinTchhBBCCDsiw6ZCCCGEsBsybCqVNyGEEEIIuyKVNyGEEELYDfmSXqm8CSGEEELYFam8CSGEEMJuyJf0SuVNCCGEEMKuSOVNCCGEEHZD7jaVypsQQgghhF2RypsQQggh7IbcbSqdt+fqunLN7AgZUi4xsxNkXFHX6MyOkGE58MzsCBkSTkxmR8iwqlPPZnaEDCs8473MjpAhqw59k9kRMsy9QJ3MjpBhi3PXz+wIwg5I500IIYQQdsMstTe55k0IIYQQwp5I5U0IIYQQdkPuNpXKmxBCCCGEXZHKmxBCCCHshlzxJpU3IYQQQgi7Ip03IYQQQgg7IsOmQgghhLAbcsOCVN6EEEIIIeyKVN6EEEIIYTfMKrMTZD6pvAkhhBBC2BGpvAkhhBDCbsifx5LKmxBCCCGEXZHKmxBCCCHshtTdpPImhBBCCGFXpPImhBBCCLsh3/MmlTchhBBCCLsilTchhBBC2A2521Q6b5lPKfyn9CKHb2HMiUmEDZ1PbORNW3PFiW/xUmBpkmPiAdjdczo62UzA1F54Fs6Dg7MTh0b9wN3D5w3NXOXzXuT0LYwpMYn9w+YTkyZzwMS3yFO1NEnWzLt6TUc5OtAqeBr3Tl0G4Mq6ME4v2GBo5oKTBuDuWwydkMSlj2aRePG6rdm7fgD5PuwKQPzxc1wZ/R0O7q4U+WoYjjm8MMclcHHwdEx3ogyKq3ht0tvkL1uY5MRkfv1oLrcv3nxknl7fj+D4pgPsW7yZ+u+0oXS9igC4Z/PAO08OJlV9x5C8KXn6TBpAUd+iJCUk8d1Hs7hx8cYj83y8aAyhG/ezafF62/TAV6tTo2VNvvxguqF5x0wdgU+5UiQmJDJuyGdcirxia+/aqyOvdW6JRjN72gJ2bNqNl7cnU7+dgKeXJ84uzgSNm8mRsGOGZn5v8nsU9y1OUmISM0fM5Hpk6n7cqkcrmnRqgtaaX2b+wv4t+/Hw9mDkNyNx83AjOTGZLz78gru37hqWOUX48VNMn72QRbOC0k3fHhzC7O9/wcnRkXatmtKxTXMeJCQwcsIX3Ll7D08PdyaPHkqunDkMyamUYtbXn1PRz5eEhAT6DRjOuXORtvYPP+hL59fbALBu/VYmTppha/PxKcGe4D8oULASCQkJhuS1hqZymvNI6ND0x2T/h84jwT0tx+QWu6dxP80x+cx8A4/J4plk+c6bUqooEA4cTDN5q9b608fMuwhYCuQDymitRyqlEoE9gAK8gEla69/+5vnqAve01uFKqRta63zP67U8ToHmlXF0dWZb6/HkCihJxXHd2dMr9QSW068ou7pOIfFOjG2a79D23D91hdAPviN72UJkL1fE0M5bwWaWzJvajCd3QEn8x3VnV5rMuSoUZVu39Jnz1inHxd/3cGD0j4blTCv7q9VxcHXhTLsRePj78Mrot7nQdzIADp7uFPikF2c7f4LpbjQv92+PY65s5HqtPnFHz3Lzq/+Sq2ND8g18nasT5huS17dpFZxcnfm2/TgK+5ek5eg3+LHvtHTzNB32Ou45vGyPt89exfbZqwDouWA466YsMSRriqqvVsPF1ZlR7T6ilH9p3hr9NkF9P0s3T5dh3fHK7p1uWq9xfahY15/IExeMjEuj5vVwdXWhe8s++FUuz/AJHzKwx3AAcuTKTpeeHejQ6A1cXF1ZtWspOza1oceAboTsCuOnuUspWqIwX3w3kU5NehiWucarNXBxc2HIa0Mo41+GvmP68mlvy6EwW85stHqzFe81ew8XVxfmbJ3DW9XeokmnJkSeimThZwtp1rUZHQZ0YP5EY/bjFAsXL2P1+q24u7mmm56UnMzUr+aydP6XeLi78caAodSvVY01m7ZTqkRR3uv9Bms3b2fOD0v5eNAAQ7K2bdsMNzdXatdtQ7XAAL4IGkv7Dm8DUKxYYbp2bUfNWq3QWrNj22/8vnI9R4+exNvbiy+mjiMhIdGQnGm9Yj2PbGltOSZXGted4IfOIzu6PnpMvvTbHg5m0jH5WUjdzX6ueTuhta6f5ueRjtvfuGNdph7QEPhOKfV3f1zjbaDAM6XNgJcCfbix7QgAdw6eJWfFYqmNSuFVLB+Vv+hD/ZXjKNqlHgB56/thTkqm9pKPKDu4HTe3hRsVF4A8gT5c327JfPvgWXL5pc/sXSwfgUF9aLxyHMWtmXP5FSNnhWI0+nU0teZ8gNvLxnyKTuFZtSxROyz9/7hDEbj7lUxtq1yGB6cu8sro3pRc9jlJf93DdCeKWwtXcXPWMgCcC+Qh6a/7huUtVtWH0zss2/jSobMUrFA8XXuF5oFosyZi++FHli33alXi78dyeqex+0XZqr4c2nEIgDOHTlMizTYGqN6iJlprDm0/kG56xIFTzBv9nWE5UwRUq0jwthAAwg8co1zFMra2e3fu077hGyQnm3jp5dxER0UD8OOcJfzvR8tnP0cnR8NP1OUCy3HAuv1OHTpFKb9Straou1G8++q7mJJN5MyTk5goy4k68lQkHl4eAHh4e2BKMhmaGaBQgfzM/Gz0I9PPR16mcMECZM/mjbOzMwF+5Thw5DgHjxyndrXKANSpXpWQ0EOGZa1dM5ANG7cBsG//QSoH+NnaLl++RstW3TGbzWitcXZ24sEDS4Xtu9lBjB47hbi4eMOypsgT6MP1banH5IfPI97F8lH1iz40WjmOYtZjck7rMbnBitHUnGv8MVk8G3vpvKWjlKqvlFqa5vGNv5s/jWzAVa21VkoVVEqtVkptUkodVEq9ppSqDDQDgpRShQFXpdQvSqlgpdRKpZTz834tzl7uJEenvtm12YxytPy3OHm4cnbhRva//y3B3aZSvGdjspcthEsub1yyexLcdSrXNh3Eb1y35x3r7zN7u5MU9eTMpxduZO/Ab9nebSolezQmR9lCRJ29ztH/LGdLh0lcWR9G5UnGVSsAHL08MEXHpk4wmSElc65seNWowLUpizjfYwJ5erfBtZi1/242U2LJJPL0bEX0tjDD8rp6ufMgOs72WJvMOFjz5i1dkEpta7Fp+rLHLtvg3bZs/vJXQ3Km5e7lQVyabWxOk7lQ6cLUbluX/0775ZHl9vwRjNbGf5b29PYkOiq1EmE2mXF0dLQ9NplMdHu7I0vWLmDj6q0AREfFkPAggZfy5GLqNxOYOflbQzN7eHkQG/X4bZzyuHWP1sxYNYPgNcGApVMXUDeAOVvm0KF/BzYsNX5orEmD2jg5PTrQExsbi5enp+2xp4c70TGxxMbF4eXlaZsWExv7yLIvinc2L6LuR9sem9LsF8nJydy+bRlyDpoyhkOHj3PmzHnGjhnC2nVbCA8/YVjOtJy93En6m/PImYUbCXn/W3Z0m0pJ63kk6ux1jv1nOdvaT+Lq+jACJht7TH4WZgN/sip76bz5KqW2p/wAr2Rg2VzW5XZiGX5dbp1eBpimtW4CvA+8p7U+AKwHRmitL2EZZv1Ea10byA74P7xypVQ/pVSYUipsU9zZDL+wpJh4nDzd0qzQAW2y7DLJ8QmcnbceU3wiybEPuBV8guzlipB4N4ZrGy2fvq9vPEjOisUft+oXJik6Hiev1MwqTWZTfAIR81Mz/7n7BDl8i3Az+Dh/7rYc2K6sDyNn+SKGZjbFxOHo6Z46wUFZOnBA8t1o4sLPkHzrHua4B8TuO4a7b+on13NdR3Om00iKfjfSsLwJMfG4psmrHBRma96A9nXJli8XfZeMpnLHetTp3cJ2rdvLJV/hQVTcI9fHGSE+Jg73J2Su16EBufLmZtySidTv2JBWfdpQqd4jbydDxUbH4mmtSAEoBwdMpvRVqV8WLqe+Xwuq1PAnsJalElSqbAkWLP+GmZ/NJmyvcRUhgLiYONy9Urexg4ODbRunWP3DarpX7k6FahXwq+FH98HdWTZ7Gf0b9WdU91GMnvtoBSyzeHp6EheX+iElNi6ebN6eeHp42CpYsXHxeHt5PWkVz110VAxe3qnP5/DQfuHq6spPP87Cy9uL9wd+DEC3ru15u2cXtmxaRr58eVi/9tEPKS9SUkw8zp5PPiafTnMeuRl8ghzlivBn2mPyOuOPyeLZ2EvnLd2wKXD1ofa/GwZNGTatCxQBuimlagPXgf5KqZ+AAcDjqmp3tNaR1t9vAB4Pz6C1nqu1rqK1rtLEo+TDzU91O/Q0+RpVAiBXQEmirBePAniXyE/9lWPBQaGcHHkpsDT3wi9we38E+a3LvFS9LFERVx677hflVuhpCjS0PH/ugJK2mxAAvIvnp/HvY1FpMt85eoHAaX0p2DIQgLy1y3E33Njrm2LDTpKtQRUAPPx9eBBx0dYWd/Qsbj5FcMzpDY4OlvYzl3n53Y7kbFcfAHNcgu1gaITIsNP4NLBs48L+JbkRkbqN1035hW9eG8PcLhM5sHwHuxastQ2xlqxd/rFDqUY4FXaSgAbWDo5/aS6l2cY/f/4Dn7w2nPFdRrN9+Vb+mL+KwzuM7fg87ND+cOo2qgmAX+XynDmZ+uGraInCzFw4BYCkpGQSE5Iwm82UKF2M6fM+Y8Q7YwneutfwzCdCT1C1YVUAyviX4cKp1PfRK8VfsXXMkpOSSUpMQmtNzP0Y4qxV3Pu379uGULOC4kULcfHKNe5HRZOUlMSBI8eoWL4s/n6+7NwbCsCukFACKpYzLNPuvaE0b9YQgGqBARw7djJd+2+/LiQ8/ATvvvcRZrPlmFDGtzaNmnSiUZNO3Lhxi2YtjB0N+Sv0tO2ckDugpO0mBACvEvlptDL1mJwnsDR3wy9Q9aFj8h2Dj8ni2WT5Gxae4AGQH0ApVQTI9Q+XiwbuAS7ARGCe1nqdUqoX0NM6j5nUTu0LH8u5ujaMl+tWoMGqcaAUYYPnUKp/c2Iu3OT6xoNcWrGHhmsmoJNMXFweTNTpq5z8aiVVpvWlwerxmJNNhA6c/aJjpnNlXRj56lag8apxKBQhQ+bg0685MZE3ubrxIBd/20OTPyZgTjYRucyS+cjkpVSb3o9SPRqTHJfA/mHGXjB9f30I3rUrUWrFVFCKS8O+JE+ftiREXidq836uT/2REj9NAODeH8E8OH2J5DtRFJ42iNydm4CjA5eHf2VY3uMbQilVpwLv/joBFCwbPoc6vVvw18WbnNx84InL5SlegDPBRw3Lmdb+9SH41a7EpBVTUQq+GfYVrfq04UbkDcI278+UTH9n89rt1KgXyM9/zEMpxegPJ9Kjf1cuRV5h24ZdRBw/wy9rF6C1JnjLXsL2HuLrH77A1dWFkZMGAxATHWu7ycEIe9bvwb+OP9N+m4ZSiulDp9OubzuuRV5j36Z9nD9xnhkrZ6C1JmxbGEdDjnL1wlUGBQ2i5VstcXJy4suPvjQs75Os2biNuPh4OrVtwYiBfek3eBRaa9q1bErePC/RuV1LRk2axpvvDMXZyZmg8SMMy/b77+to3Kguu3asRClF776DGfRhP86eu4CjoyN161bH1dWFZq82AGDU6CmE7Hvye9IIV9aGkbduBRpZzyP7B8+htPU8cm3jQS6u2EPjNRMwJ5mItJ5HwicvpeqMfpTsaTkmhw419pj8LOSrQkBlxrUmGWG923Sp1rp6mmlOwK9Y7io9CdTUWpd+yt2mGnAD9gODgC7Ap1gqapeBilrrckqp/sB7QGdgW8rdptZr7L7TWm9/Utbl+btn7Y35kKS/q1dmUWWdo58+UxazRHk+faYs5LyOe/pMWcyJB//0steso7DLP/3MmTWsOvRNZkfIMPcCdTI7QoYtzl0/syNkWOfriw09mwwp2sWwc+30yKVZ8kyZ5Stv1mHL6g9NSwbaPmbeno+Z5vKEVS+x/jw8/xxgjvVhvjTTu/zTzEIIIYR4MeyqSvKCZPnOmxBCCCFEVuTj41MN+A4ojeX7aHtGRESc+5v5fwJMERERPa2PvbFczpX2O2bGRkRE/O03lkvnTQghhBB2I6t8hYePj48b8BswDMs3WYwEFgGPHa/38fFpC3QDfkoz2Q84FhERUTEjz20vd5sKIYQQQmQlDYA7ERERv0RERCQCk4HyPj4+ZR6e0cfH5yUgCPj+oaaKwJGMPrFU3oQQQghhN3TWueqtDHAq5UFERITJx8fnHOCbdrrVt1g6b4WAommmVwRK+/j4RGD5btmlwMfWzuATSeVNCCGEECLjPIGHb8+P46HvhPXx8ekMZIuIiFjwmHXEANuBQKAGUBf45GlPLJU3IYQQQtiNrHLNG5aOmvtD0zywdMgA8PHxyQt8BtR/3AoiIiKGpnl438fHZwowChj/d08slTchhBBCiIw7heUuUwB8fHwcgZJARJp5mmD52rGjPj4+97Dc1NDNx8cn3LrMBB8fn7R/49IVyx8i+FtSeRNCCCGE3chCf2FhG5DXx8fnLSzXqo0EzkVERNj+plpERMTPwM8pj318fMYDRVO+KgTL30z38fHxeRvIY13HU/9sklTehBBCCCEyKCIiIh5oCQwEbmOpsr0O4OPjc9zHx6f7P1hNXyx/W/0KEAr8juV74/6WVN6EEEIIYTeyTN0NiIiIOABUfcz0ck+Yf/xDj28CHTL6vFJ5E0IIIYSwI1J5E0IIIYTdyELXvGUaqbwJIYQQQtgR6bwJIYQQQtgRGTYVQgghhN3IQl/Sm2mk8iaEEEIIYUek8iaEEEIIu5GF/jB9ppHO23OUpDI7QcaEu9jfG2Bs7NXMjpBhL7tkz+wIGeKm7O+wUNYtb2ZHyLAoc2JmR8gQ9wJ1MjtChsVf25XZETLMww63c+fMDvB/kP0dpYUQQgjxf5Zc8ybXvAkhhBBC2BWpvAkhhBDCbsg1b1J5E0IIIYSwK1J5E0IIIYTdkGvepPImhBBCCGFXpPImhBBCCLth1nLNm1TehBBCCCHsiFTehBBCCGE3pO4mlTchhBBCCLsilTchhBBC2A2z1N6k8iaEEEIIYU+k8yaEEEIIYUdk2FQIIYQQdkP+PJZU3oQQQggh7IpU3oQQQghhN+TPY0nlTQghhBDCrkjlTQghhBB2Q74qRDpvmU8pqnzei5y+hTElJrF/2HxiIm/amgMmvkWeqqVJiokHYFev6ShHB1oFT+PeqcsAXFkXxukFGwyMrGg7qRf5yxYhOTGJFR/N4/bFm4/M0+P74ZzYdID9i7dQ753WlK5XEQC3bB5458nBZ1XfNTTzhKCRlClXmsTERD4ZPJFLF67Y2ru/3Yn2XVqjteab/8xn26ZdtrYmLRrQvE1jhgwYZWjeYZ9/SEnfEiQmJDFl+H+4GnnN1t6+R1tavP4qWsP3M39kz+YQHBwcGDjuHcpU9MHFxZkF039gz+YQQzN/+NlASvgWJzExiWnDZ3AtTea2PVrTtFNTQPPTjMWEbNlHl/c6U7V+FQC8snmRK09OOgV0MTRz30kDKOJbjOSEJGZ/NIsbF68/Ms8ni8YSunEfGxevx8XVhQ++HEL23NmJj41n1pCZRN2JMizvwMnvU9y3OEmJScwYMYNrkal5W/doTdNOTdBas3jmYvZt2Y+HtwejvvkYNw83khKTmfphEHdv3TUkb0rmWV9/TkU/XxISEug3YDjnzkXa2j/8oC+dX28DwLr1W5k4aYatzcenBHuC/6BAwUokJCQYlhkg/Pgpps9eyKJZQemmbw8OYfb3v+Dk6Ei7Vk3p2KY5DxISGDnhC+7cvYenhzuTRw8lV84chmVN2cZ+1m3c/zHb+PU023jSQ9t4d/AfvJIJ21j8e9J5y2QFm1XG0dWZTW3GkzugJP7jurOr13Rbe64KRdnWbQqJd2Js0/LWKcfF3/dwYPSPmREZ36ZVcHJ1Znb7cRTyL0mL0d35qe/0dPM0GfY6Hjm8bI93zF7NjtmrAeixYBjrpyw1NHOTFvVxdXPl9Ra9qFS5PB9PGMw7bw0FIGeuHHTv1Yk2Dbrh6urCut3L2FbJ0nkbPXkYtRvU4OSxCEPz1m1WGxdXF/q3GUi5gLIMHPsOI98eA0D2nNlo36MtPZr2xdXVhZ+3f0/7zV1o1rEJTs5OvPPaB7yU7yUatqpnaOZazWri4urCwLaDKBtQhgFj+jG293gAsuXMRpu3WtPv1XdwcXVh4bb5hAR2Z+k3/2XpN/8FYPKiT5n32XxDMwe+Wh1nVxdGtRtBKX8feox+m6l9J6ebp+uwN/DKnrovN32zOZdOXeR/M5dQq3UdOgx8ne8nGJO75qs1cXFzYdBrgynjX4Z+Y/oxvvcEwLKNW7/ZineavYuLqwvzt86le7U3adqpCRdORTL/swU079qMTgM6MnfiPEPyArRt2ww3N1dq121DtcAAvggaS/sObwNQrFhhunZtR81ardBas2Pbb/y+cj1Hj57E29uLL6aOIyEh0bCsKRYuXsbq9Vtxd3NNNz0pOZmpX81l6fwv8XB3440BQ6lfqxprNm2nVImivNf7DdZu3s6cH5by8aABhuVN2cZ1rNs4KGgsHZ6wjbdv+42VabZxUCZt42chd5s+h2velFL1lVJ/KqW2K6V2KKX2KKXKPMP63k/ze2Wl1EalVLB1vZOVUi7/Yp3jlVJPfCdZ209bX0PKjyFlljyBPlzffgSA2wfPksuvWNpgeBfLR2BQHxqvHEfxLpaTcS6/YuSsUIxGv46m1pwPcHvZuE94AEWr+nB6RzgAlw+d5ZUKxdO1l28eiDabibC+rrTKvVqV+PuxnNkZbkjWFJWrVWLnlj0AHD5wjPKVfG1td+/co3X9riQnJ/NS3txE3U/tKB8MPcK44Z8bmhXAL7A8IdtCATh+8CRl/HxsbffvRtGjSR9MySZyvZyLGGvewHpVuXX9Fl/8+Bkjg4aye9NeQzNXqFqe0O1hAJw8eAqfiqVtbVF3o+jbdIA1c05iomLSLVu7eS2i78cQtuOAoZnLVC3L4R0HAThzKILifiXTtVdvUROzNnNo+0HbtLJVfTlkXebQ9gP41a5kWN7ygeUIs27jU4dOUdqvlK0t6m4UA159B1OyiZx5Urdx5KlI3L3cAfDw9iA5KdmwvAC1awayYeM2APbtP0jlAD9b2+XL12jZqjtmsxmtNc7OTjx4YKn+fDc7iNFjpxAXF29oXoBCBfIz87PRj0w/H3mZwgULkD2bN87OzgT4lePAkeMcPHKc2tUqA1CnelVCQg8ZmrfWv9zGs2cHMSaTtrF4Ns/rhoWtWuv6Wut6wHjgP8+wrtEASqmCwM/A+1rr2kAtIAGY8TfLPovp1teQ8jP56Ys8O2dvd5KiUt842mxGOVr+W5w8XDm9cCN7B37L9m5TKdmjMTnKFiLq7HWO/mc5WzpM4sr6MCpP6mFEVBtXL3ceRMelZjaZcbBmzlu6IBXb1mTz9OWPXbb+u23Y8uUKQ3Km5eXtRXR0aofBbDLj6Ohoe2wymXij9+ssW7eI9as326av/X0TWhv/Kc/Ty4PY6NjUfGYTjo6pb1eTyUyHnq8xd/Ustq3ZCUCOXNkoWKwgw9/6hJ+/XcIn00cYmtnD+6HMafYLsGzztj3bMGvVV+xcsyvdsl3f68KPM342LGsKdy8P4tJkNqfJXKh0Yeq0rcd/p/3y0DLutmXiY+Lx8PYwLK+HlwexUY/Pm/K4TY/WfLVqJrvWBAOWTl3lugHM2zKHTv07sn6pcZdYAHhn8yLqfrTtsSnNey85OZnbty1DuEFTxnDo8HHOnDnP2DFDWLtuC+HhJwzNmqJJg9o4OT06MBUbG4uXp6ftsaeHO9ExscTGxeHl5WmbFhMb+8iyL1K2bF7c/wfbeOqUMRy2buMxY4awLhO38bMwG/iTVb2Iu01zApFKqXeVUvuUUnuVUl8AKKUWKaXmWatpO5RS7yil1iqljimlSlirXbmUUt8CbwHztdanAbTlDDoRaKGUcrdWx8pY1ztAKTXe+vvnSqlNSqkQpdT3z/JClFKFlFJnlFL5lVINlVK7lFJOD83TTykVppQK2xJ3NsPPkRQdj5OXW5r1OaBNll3GFJ9AxPz1mOITSU3fKqMAACAASURBVI59wJ+7T5DDtwg3g4/z527LG+7K+jByli/yLC8zwxJi4nH1TJPZQWG2ZvZvX4fs+XLRZ8koKnesS53eLShdz/Ip8OWSrxAfFffI9XFGiImOwdMr9aDr4KAwmUzp5vl5wf+oVf5VqtYIoFqtKkZHTCc2Jg4Pa7UEwMHBAZMp/aHk10W/08a/E5Wq+xFQsxL370axZ7Ol2nY4JJxCxQsamjkuOg53z7SZU/eLFCsXraJTQBf8qlWgUk3LNZBFShUmNio23fVxRomPicPtCZnrdWhIrry5GL9kEvU7NqRVn7ZUqhdAfEy87XW6e7mn60y9aHExcbYqGqR/76VY9cNqulTuRoVq5alYw483Br/BstnL6duoPx93H8XYuWMMywsQHRWDl3fqsLNlX05977m6uvLTj7Pw8vbi/YEfA9Cta3ve7tmFLZuWkS9fHtav/eWR9WYGT09P4uJSP7jGxsWTzdsTTw8PW/UqNi4eby+vJ63ihYiKisH7Kdv4xx9n4f3QNu7Vswubrdt4XRbZxuKfeV6dt4bWztReYCGwHOgFfKi1rgGcT9PpidRaNwVOAsW01i2AX4HW1mrXHa31u0AR4HzaJ7F24G4C+R4XQimVDbirtW4C1ASqK6Ve+YevYchDw6ZNtNaXgRHAD1gqfl211unGHLTWc7XWVbTWVRp5lHzcev/WrdDTFGhoGXbJHVDSdhMCgHfx/DT+fSzKQaGcHHkpsDR3jl4gcFpfCrYMBCBv7XLcDb+Q4ed9FpFhEfg0sGQu5F+SGxGpmddPWcK3r41lXpdJHFi+k10L1tqGWEvWLs/pxwylGuHg/iPUb1wLgEqVyxNxMrWjXaxEEb75/gsAkpKSSUxMROvM/cx1NPQYNRpWA6BcQFnOnUx9KxQuUYjP5lmuc0pOSiYpIQmz2Uz4/mNUty5T0rc4N6/+aWjmY2HHqdbQsl+WDSjDhVORtraCxQsyft7Y1MyJlswAAXUC2G8dIjbaqbCTBDSwdNRL+ftwKeKire3nzxfx8WvDGddlFNuXb+WP+Ss5vONgumX861fm5H7jKhfHQ48TaN3GZfzLEPnQNk7pmNm2sdbE3I+xVUTv3b6Hh5dxlUKA3XtDad6sIQDVAgM4duxkuvbffl1IePgJ3n3vI9s+Uca3No2adKJRk07cuHGLZi26GZr5SYoXLcTFK9e4HxVNUlISB44co2L5svj7+bJzr2Uf3hUSSkDFcobm2vOUbbziMdu4rG9tGjfpRGPrNm6eRbbxP6G1Nuwnq3peNyxs1Vp3AVBK+QB7gXrAUKXUVOtjZZ035eKRe8Ap6+93gdRSjsVFIN3FVEopB6Aw8PBZKWXd8cDLSqklQAzgBTj/w9cwXWv93WOm/w5MBjZrra88pv2ZXFkXRr66FWi8ahwKRciQOfj0a05M5E2ubjzIxd/20OSPCZiTTUQuCybq9FWOTF5Kten9KNWjMclxCewfZuxF3ic2hFGqTgUG/DoepRTLh8+hdu8W3L54g5ObDz5xuZeK5+ds8DEDk6bauGYbtepV479rFqKUYuQHE+g1oDsXL1xm64adnDx+mmXrFqG1ZueWPezf8+TXYYQd64KpWrcy3638GqVg8uAgOvfryNUL1wjetIczJ84xd/UstNaEbN3P4ZBwjh88ybDPBzF39SxA8cXIF3WFweMFr9tN5ToBfPX7DJRSBA2ZRse+HbgaeZW9m0I4d+I8X6/6ErRm/7ZQwkOOAlCoeEEO7Mqc7b1/fQgVa1di8oqpoBTfDPuSVn3aciPyOmGb9z92mQ0/rWXg9MFMXD6F5KRkvvzgWa4SyZjd6/cQUCeAGb9NRynFtKHT6NC3PVcjrxGyKYTzJ87z5coZaA2h20I5GnKUqxeuMiRoEK3faoWjkxMzP5ppWF6A339fR+NGddm1YyVKKXr3HcygD/tx9twFHB0dqVu3Oq6uLjR7tQEAo0ZPIWSfsdc+Ps2ajduIi4+nU9sWjBjYl36DR6G1pl3LpuTN8xKd27Vk1KRpvPnOUJydnAkab+wlCynbeKd1G/d5yjYenQW3scgY9aw9S6VUfWBAms5bDiwVs2VYKm8PlFIbgM+wVOOWaq3XK6WmAKe01ouUUoMAN631FKXUTa11XqVUIWAj0Aa4BfwPuAIka637KaXWA1O11tuUUvOAq1g6ht211p2VUnmwVPeqAj2AG0/onGEdcn1su1JqGFAQCASGaK2f+N0LSwp0z7rd9McId7GruAAsjzX2rs/n4WWX7JkdIUPclP3dhJ7T8eHPfllflNm+7vDbevNoZkfIsPhru54+UxbjUaBOZkfIsKTEq+rpcz0/bQu3MuzktfLSH4a+tn/qeR2lGyqltgMmwBsYYl13qFLqFpaO1T4snbenOaGU+llr/YZS6g1gFpYKmod1/TeVUrmAr4BvlFKXresH2A+MUUqFYLm54TxQ4B++hiFKqbRfMBUBzAO6ATWwVAF/VUrV0Frf/4frFEIIIYR4rp658mY0pZQfcF5rHfPUmQ0mlbcXTypvL55U3owhlbcXTypvxjC68tbawMrb6v/PK2+G0Vr/qy8Is34/3MbHNEVorfs/WyohhBBCCGPYXeft39JaJwL1MzuHEEIIIf49+QsLL+Z73oQQQgghxAsinTchhBBCCDvyf2bYVAghhBD2zyzDplJ5E0IIIYSwJ1J5E0IIIYTdsLevOHsRpPImhBBCCGFHpPImhBBCCLthzuwAWYBU3oQQQggh7IhU3oQQQghhN+RLeqXyJoQQQghhV6TyJoQQQgi7Id/zJpU3IYQQQgi7IpU3IYQQQtgN+Z43qbwJIYQQQtgVqbw9R3EOKrMjZMgNHmR2hAw7MrpqZkfIsGZBZzI7QobcNcVldoQMOxFzJbMjZFjd7KUzO0KGLM5dP7MjZJhHgTqZHSHD4q7tyuwIWZ5c8yaVNyGEEEIIuyKVNyGEEELYDfmeN6m8CSGEEELYFem8CSGEEELYERk2FUIIIYTdMMtXhUjlTQghhBDCnkjlTQghhBB2Q+puUnkTQgghhLArUnkTQgghhN2QL+mVypsQQgghhF2RypsQQggh7IZU3qTyJoQQQghhV6TyJoQQQgi7oeV73qTyJoQQQghhT6TyJoQQQgi7Ide8SeVNCCGEEMKuSOVNCCGEEHZDS+VNOm+ZTilqftaT3L6FMSUms2v4fKIjb9qaq3/6JnmrlCYp9gEAm96ejpObC/W/fhcHZyfi/rzHzsFzMD1INDCy4s1JfSlUtijJiUl8/9Fs/rx445F5Bn3/CYc2hbJ98UZc3F0Z8NUgPLN7kRCfwLzBXxF9J8qwzKBwbtgVh5cKgimZxM0/oe/fsrU6BTTBqXQVNJrk0PWYzh0GJxdcmvVGuXlAUiIJG7+H+Bhj0irFkM8/pIRvCZISEgkaPo2rkdds7e16tKXZ601Bw6KZP7F3cwgODg68P+4dfCqWxtnFme+n/8jezSGG5E3J/PGUoZT2LUliYhITh07hcuRVW/vrPdvTunNztNbMm76IXZv32NqKlizMD2vm0sSvDYkJxu7LU6aNxbe8D4mJiQwdOJbIC5ds7f3efYu27VsAsGXTTqZP/ZYcObIza+5UvL09uXP3PsM+GMvtv+4Ylrf3pP4U8S1KUkIycz6axc3HvPc+WjSasI372bx4g2161VerUb1lLb7+YLohWdMEovKUXuTwLYw5MYnQofOJSXOM85/4Fi8FliY5Jh6A4J7TUY4OtNg9jfunLgNwZV0YZ+ZveOzqn39cxayvP8fPz5eEhAT6DxjOuXORtvYPP+jL66+3AWDd+q1MmjTD1ubjU4LdwX/wSsFKJCQkGJI3rfDjp5g+eyGLZgWlm749OITZ3/+Ck6Mj7Vo1pWOb5jxISGDkhC+4c/cenh7uTB49lFw5cxieWfw7f9t5U0pNAyoD+QAP4DxwS2vd6THzFgXKa63/UEr9DFQA7gIKyA0Eaa1/fJawSqlawDagmtb6kHXaJCBSaz3/HyzvDIwGmgEPrJN/1FoveMpy/wEOa61/fpb8j1OkWWUcXZ1Z3XYCeQJKUG1MNzb3Tj0Y5C5flPXdp5JwN7XTEDC0A2eW7eLsr8H4D2lPmTcacnz++ucd7YkCmgbi7OrC5PafUNy/FF1G9+CrvlPTzdN+WFc8c3jZHtfr2pjIo+dZ9dUyanVsQOuBHfllwkLDMjuWqIhydCbhf0E45CuGc52OJP4x29Lo4o5TpQY8WDQGnF1x6zYK07nDOJWvjfnPiyTvX4tj2Ro4V21B0s7/GZK3TrNauLi68G6bgfgGlOW9sQP45O2xAGTPmY3XerTh7ab9cHF14aftC+m4OYSmHZvg6OzIe699yEv5XqJBq7qGZE3RoHkdXFxd6Nl6ABUCyjF43PsM6fUxADlyZadTz3Z0bdwTF1cXlu/4mV1VLJ03Ty8PBo97n6TEJEPzAjRv1QhXNxdaN+1GQBU/xk0eQa9u7wNQuEhB2ndqRYtGXdBa8/u6n1j3x2Y6dWnL/pCDfDV9LnXq1eDjsYMY9sFYQ/JWfbUazq4ujGk3klL+pXlzdC/+0/fzdPN0HtYdr+ze6ab1GNebinX9uXjigiE503qlueUYt6X1eHIHlKTSuO4E90rtQOb0K8qOrlNIvJN6jMtbpxyXftvDwdHPdMr4V9q2bYabmyt16rahWmAAQUFj6dDhbQCKFStM167tqFmrFVprtm/7jZUr13P06Em8vb0ImjqOBAM/fKS1cPEyVq/firuba7rpScnJTP1qLkvnf4mHuxtvDBhK/VrVWLNpO6VKFOW93m+wdvN25vywlI8HDciU7Bkld5s+5Zo3rfVQrXV9YArwi9a6/uM6blaNgeppHg+1zl8PSFnHs+oDTAPe+5fLTwFcgRrWXK2AXkqpUs8h27+Sr6oPV7eHA3Dr4DleqlgstVEpshfLR+2g3rT6bSylOltOxvvG/8zZFbtBKTwL5CL+r/uGZi5VtSxHdxwC4PyhMxStUCJde5Xm1dFmzdHth2zTNi1cw+pZvwKQu8BL3L91z7jAgEOBkpguHgfAfOMCDnmLpDYmJ6CjboOzK8rZBawHhuTDW0kOXQeA8s6JjjeuUlghsAL7toUCcOLgSXz8fGxt9+9G8XaTvpiSTeR+ORcx9y0nvcB6Vbh1/S+m/jiZEUFD2L1pr2F5ASoF+rFn2z4Ajh48jm/FMra2e3fu06VRT5KTTeR+OTfRUakn6tFfjGDW53N5EP/g4VW+cIHVA9i2ORiAg2HhVKxUztZ27eoNunXoh9lsRmuNs7MTCQ8SKO1Tgq2bdwEQuu8g1aoHGJbXp2pZjuw4CMCZQ6cp4VcyXXu1FjXQ2szh7QfTTT994BQLRn9nWM608gT6cH3bEQBuHzxLzoeOcd7F8lH1iz40WjmOYl3qAZDTrxg5KxSjwYrR1Jz7AW4vG1cRqlUzkA0btwGwb/9BKgf42douX75Gy1bd0+0TDx5YKmyzZwcxZuwU4uLiDcuaVqEC+Zn52ehHpp+PvEzhggXIns0bZ2dnAvzKceDIcQ4eOU7tapUBqFO9KiGhhx5ZVmRd/+qGBaXUTKXUPuvP+0opF2A48KZSquVjFskPxFmX/VkpNVcptVEptU0p9a5Sap1S6qhSqqhSKq9Sarv1J1gp5WtdLhtQB5gANFBK5Uyz/o5Kqa1Kqb1KqSpKqfZKqXlp8h5RSr0MtAdGaa3NAFrraKCO1vqMUqqxUipEKbVLKdVNKfW6UuqQUmojEPhvttM/4eztTmJ0nO2xNplRjpb/FmcPV058v5HtA2ez4Y0gyr7VmJxlC1lek6MD7bdMIX8NX/4MPf2i4j2Wu5c78Wkym01mHKyZXyldiOpt6/Db9KWPLKfNZkb8Mp7GPZoT/tDJ5UVTLm7ohDQHVW0Glbr765i7uL85Dreun5B8ZFua+TSu7QfhXLEBpgvHDMvr6eVBbHSs7bHZbMLRMTWvyWSmfc+2zF49i+1rdgKQPVd2ChZ7hY/eGsXib5fy8fQRhuW1ZPYkJk1mk9mMo6NjmswmOvdqzw9/zGHLH9sB6D/0bYK37OXMibOGZk3h5e2VriNpNqVmTk5O5s4dy4eMsROHcyz8FOfPXeT40VM0bd4AgKbNG+Du7m5YXg8vD+Ke8N4rVLowtdvW5X/Tljyy3N4/dpNZxQpnL3eSolPfe9qceoxz8nDlzMKNhLz/LTu6TaVkz8ZkL1uIqLPXOfaf5WxrP4mr68MImNzDsLzZsnlx/3607bHpoX3i9u27AEydMobDh49z5sx5xowZwrp1WwgPP2FYzoc1aVAbJ6dHB9NiY2Px8vS0Pfb0cCc6JpbYuDi8vDxt02JiYx9ZVmRdGe68KaVeAwpgqbLVAXoCJYEvgJ+01muss06zdoQuAUHA62lWc05r3RQ4BxTUWjcHVmGphFUH/sIytDkYyG5dphuwTGv9AFgGvJ1mfWe11g2B/sC3wGqgrlLKXSlVAzgJuGAZ8jVZX8f7SqntQJhS6n3repy11nWAJcBUoCHwKqlDrI/bHv2UUmFKqbAdsWf+0TZMKyk6HmfP1IO/cnBAm8wAJMcncHzBBkwPEkmKfcD1PSfI7VsYAJ1sYkXDj9j90QLqfmlsqTs+Jh63hzKbrZlrtq9Pjny5GLFkPLU7NuDV3q0pX6+Sbd6gbuP57PUxvD97uKGZdeIDlItbminK0oEDHIuUR3lkJ/77UcQv/ATH4hVxyFvUNmfCipk8WP4fXFv2NyxvbEwcHl7pt7HJuo1TrFi0knb+nahY3Q//mpWIuhtlu8btSEg4BYsXNCyvJXMsnp4etscOSmEymdLN89/vV9C0UlsCqlekSk1/WnRoStuurZj769fkzpOLb5caez1WTHQMnl6pJzblkD6zq6sL38wLwsvLk5FDPwXgqxlzKVT4Ff77+wIKvJKfq1evG5Y3Libuofeesr336nZoQM68uRmzZCL1OjakZZ82VKznb1i2J0mKicfZM/W9p1TqMc4Un8DpeesxxSeSHPuAm8EnyFGuCH8GH+fP3ZaO0JV1YeQsX+Sx634RoqJi8PZOveTDwcHhoX3ClR9/nIW3txfvD7RcFtCta3t69ezC5k3LyJcvD+vW/mJY3qfx9PQkLi61wx8bF082b088PTxsVcLYuHi8vbyetIosx4w27Cer+jeVt7LALm2RCOyzTnvYUGtH6H0snb1zadpSyi73gJSPKncBN+APYA+Wztw4IOWM1QeorZRaD9QC3lHKVjrZCaC1DsfSGUwCfgNeA3oB87B0CF9OWUZrPcs6JPw9kFKTj7D+WwD4S2t9V1sG11OvrH6I1nqu1rqK1rpKPc+Mj77eDDtNwYYVAcgTUII71gt0AbIVz0/L38agHBTKyZG8VUvz19FIak7uSf6alk2eFPsAbTZ2BzsTdgq/BpahouL+pbgScdHWtmzKT0x67WOmdhlH8PJtbFiwmmM7DtPy3XbUaGcZEkmMe2A74RjFfP0cjkXLA+CQrxj6duqF9DohDkxJYEoGU7KlQufqjlOVV3EsU80yU1KirbNnhGOhx6je0PLcvgFlOX8y9VqlQiUKMmneeACSk5JJSkjCbDZzdP9R2zIlfIvz59U/DcsLcDj0KLUaWa6cqBBQjrOnztvaipQoxH8WTLZlTkxMwqw1bWt2oV+HgfTrMJDbt+7wbpchhmYO3XeIRk3rABBQxY9TJ9J/AFv0yyxOHItgxODxmM2W///qNauwbOlKOr/Wm8uXrhC6z7jhpoiwU/g3sAx1lfIvzaU0773Fn//A6NdG8GmX0exYvpU181dxZEfmD4X9FXqa/I0sH+ByB5S03YQA4FUiP41WjrUd4/IEluZu+AWqTutLwZaWAY+8tctxJ9y4a/X27A2lebOGAFQLDODYsZPp2lf8upDw8BO8+95Htn2irG9tGjfpROMmnbhx4xbNW3QzLO/TFC9aiItXrnE/KpqkpCQOHDlGxfJl8ffzZedey6UZu0JCCahY7ilrElnJv7nb9CTQFfjaOlxaA5gDVOExnUGt9Spr9es763LA33ZnGwCXtdZNlVJ1gElKqRFAkrUzCIBSahuW6hxYhjX/p5TyB1Le5fOBWUAeoL/WWiulVgGfKqXGaq3NSik3LJW+lHdnytn5TyC3Uiq31vq29bW9kHGdyHVhFKhTnla/j0Upxc4hcynftzlRkTe5tOkg537bQ+tVEzAnJ3N2eTD3Tl/l+MIN1JryNpUGaTBr9nyy6EVEe6KDG/ZRro4fo36dDEqxYPg3NO3dmj8vXufw5rDHLrPrf1vpM20gdTs3xMHBgQXDZxma2XT2MA6Fy+LaaTgoReKmH3Dyb4S+dwvThXDMNyNx7fwRaI352lnMl05i/usKrk164lSulnUZ4y6e3rkumCp1K/Ptyq9AKaYMDuL1fh25euEquzft5eyJc8xe/TVaw76t+zkSEs6JgycZ8vmHzF79NQrFtJEzDcsLsG3tTqrXrcr3q2ajlGL84M/o3r8zly9cYefG3Zw+fpYf/piD1prdW0M4uPewofkeZ+3qzdStX5NVGxajlGLwe6Po/14PLpy/hKOjA9VrVcXF1YWGTSyHns8mzODcmUi++s5yk8CN638yZOCj1xm9KKHrQ/CrXZFPV0xBKZg97Gta9mnDjcjrHNgcaliOjLiyNoy8dSvQaNU4UIr9g+dQun9zYi7c5NrGg1xcsYfGayZgTjIRuTyYqNNXCZ+8lKoz+lGyZ2OS4xIIHfrU+9Gem99/X0fjRnXZuWMlSin69B3MoA/7cfbcBRwdHalbtzquri40e9UydD569BRC9h0wLN8/tWbjNuLi4+nUtgUjBval3+BRaK1p17IpefO8ROd2LRk1aRpvvjMUZydngsYbe5nFs5AbFkD9k42glOoJlNFaj1RKKWA6UI3/196dx8lZluke/10JYQsRQaKEdQShEBgQFMSIaIKgCDgqCIqgLGGb4RwFQRAYDyjKgCAiO4pK2BUGWVyOsiOLjIJsSilbhAAqBGVJWHOdP563SKXp6qoOTT3P2+f+fj79ydvV1clFU1311LPcd9r8f57tYyS9CziHdJrz34Af2r6i+v5FgN8DXwB2an2t/RSnpP2rf+5M4ALSLNxc4DDSXrW7bJ/clmkHYEfSLN7awBtIS6N7276zus9VwBW2v1F9Pg44kDToexmYAFwEHAdMBna2vWN136nAMcAs4CXg7G6nTc9YYcdaPaJ+vVCejbWvxUn7TswdYdg+fPTwl9NzemZu/0scvFaPzulPqY6RtMmSq+eOMCyfeGF89zsVZscnrskdYdhmP3J97gjDNm6ZVdTPf2+9Zd/bt9fa2x67oa//bb3qafAWehODt9dfDN5efzF4648YvL3+YvDWH/0evK277OS+vdbe/tiNRQ7eoj1WCCGEEEKNRIeFEEIIIdRGtMeKmbcQQgghhFqJmbcQQggh1Mbc2KsfM28hhBBCCHUSM28hhBBCqI3Y8xYzbyGEEEIItRIzbyGEEEKojdjzFjNvIYQQQgi1EjNvIYQQQqiN2PMWM28hhBBCCLUSg7cQQgghhBqJZdMQQggh1EYcWIiZtxBCCCGEWomZtxBCCCHURhxYiJm3EEIIIYRaiZm3EEIIIdRG7HmLmbcQQgghhFqRYwRbC5L2sH167hy9qlteiMz9ULe8UL/MdcsLkbkf6pZ3KKsss17fBi73P36bhvp6o9F4N3AqsDpwK7Bzs9m8b8B9lgROAzYHXgbOBg5oNpsvNRqNMcC3gJ2qrx3bbDaP6pYrZt7qY4/cAYapbnkhMvdD3fJC/TLXLS9E5n6oW97iNRqNRYGLgW8CSwG/An44yF2PJQ3MlgcawBTgc9XX/hewEbAaMBnYq9FobNrt347BWwghhBBqw57bt48upgCzms3muc1m8wXg68DajUZjjQH32xvYFXgeWBZYFJhVfW0H4Jhmszmr2WzeC5wI7N7tH47BWwghhBDC8K0B3NP6pNlsvgzcB6zZfqdms/lis9l8HvgRcDcwA7hssL8DaA78/sHE4K0+6rZXoW55ITL3Q93yQv0y1y0vROZ+qFvejubivn10MR6YPeC22cDiHe6/IzAJWBr4Woe/Y6jvf0UM3mqibhtN65YXInM/1C0v1C9z3fJCZO6HuuWtidnAYgNuWxx4ZrA7N5vN55rN5mPAfwFbdfg7On5/uxi8hRBCCKE2bPfto4t7SKdMAWg0GmOBt5GWPmm7/fJGo7Fl202LAP8Y7O8gHWiY7/sHE0V6QwghhBCG72rgLY1G47PA+cBBwH3NZvOPA+53K3BIo9G4EViiut+J1dfOBw5qNBo3ABOAfYDPd/uHY+YthBBCCLVRyp63ZrM5B9iSVO7jCWAzYDuARqNxd6PR+Ex11yNIA7gmcANwLvDd6mvfAa4H7gBuBE5tNpuXdvsZRJHewklajTQNeycw04X+D5O0eqev2f5TP7MMh6SFgA2AcYCA5WyflzdVd5LGkPJOBn5j+4XMkXomaZztF3PnGIyk421/vrpex/YduTONVpLGAuvRtjnb9nX5EvVG0hi31ZCQNMH20zkzDSRph05fs31uP7O8HlZYeu2+vQ4+POuuIYv05hLLpgWTtA/wcdLJlDNJg7h9sobq7LQOtxuY2s8gw/TfwMKk4oljgUeAogdvko4C7gdWBtYH/sq8go/FkbQXsB/p+UbAS6SClCX617brb1P2YxcASYfaPqK6nmT70dyZenQh8EbgsepzA8UP3oCrJX3K9qOS3g2cAaydO9QA61V/bkCqLXYj8C7Sc1ztB28hBm+l+xTwPuAq29+W9D+5A3Vie8pgt0tauN9ZhmlJ2++X9D3S1Pevcgfqwca2D5R0te0pkq7MHaiLacD7gUOBHwNfyBtnSOpwXbKppGUZgHOowYCzsozt9+UOsQAOB34m6VrSgGjbzHlexfYBAJJ+YfvDrdsl/TJfqpFTimC/2QAAF8FJREFU6AJUX8Wet7K1/v+0HqnP5wrSK0l7SmpKul/SA8BduTN10Vq+G297DmkWrnRjJW0IPFgNjifmDtTF49Vs0ATb15BmkkvlDtclq+OAE2CGpBVzh1gAdwN/I+1vuoVUlLVUb5b0BgBJSwFvypwnjJCYeSvbuaRlhJUl/Qz4SeY8vdgd+AD1mGUBuFjSV4DbJd0MPJU7UA/OBE4gtVs5Gjg+b5yu/inpY4Al7UnZg83Jkv5CGgRNbLu27ZXyRuuoVgNOSY+Sci4KbCfpiepLtr1cvmQ9ux44wPYlkr4I3ESagSvRkcDvJf2dNHCbljnPiJgbM28xeCuZ7RMlXQWsBdxj+87cmXrweLUXZILtayR9NXegodg+qXUt6afAvRnj9Gq87XdX16UPjiG9YKxKOh6/P6nPX6nG5w6wAN4p6UbSIHPNtmvbnpw32qvZngQgaUXbD7VulzSwH2Spptp+GMD2sZKuyZxnKGNtryJpOeBvtl/KHSiMjBi8FUzS7sCatveV9EtJZ9k+K3euLuo0y4KktYBTSRunzyEt816eNVR3H5F0nO2Xcwfp0WzSzMSKpH5+xS6l235Z0pa2fyppAnAwabvC0by6DU4p1skdYDgkrQ0sBxwt6QDSQHMMqer8O3JmG4qkL9s+0vbDkja13dprOg34Xc5sQ9gbON/2I7mDjCSXP8H8uos9b2XbG/hydb0l8O8Zs/RqGqnp7kGkqtElz7JAqrGzC/A46dTYYVnT9GYi8IikmyXdVM20lOw0YCVgc1IRyul543Qm6evA7lUJmRNIS03PAqdkDTYE2zOAN1Z/PkJqu7MZ8NCQ35jPUsCngbcAO1TXnwROzhmqB5u1XR/Sdt3od5BhWFjS/0g6W9J0ScX+7oXhiZm3sr1s+zkA2y9KqsPbjdYR9QnAJTmD9Mr2vZJs+++SiqrX1MFW3e9SlFVtT5O0se3LJB2UO9AQNrC9eTV42xpY0fZsSTfkDtaJpP2A7SW9FziGVEJmBnAcPVRq7zfb1wPXS1rf9q258wxDp4MhJR8SOTR3gNdDnDaNwVvpLpF0PelE0/pA16rLBWjNtIm0V+9Byq7dNKta3h0v6VPM6zdXsnGkmYpXCgsDe2ZNNLSFJC0DqaApMLfL/XNqZdsAuNt2a6l0XKY8vdiCVKzZpJms1W0/WYMZ2RUkHcm8x/Eytv+1y/fk1OlgSJEjCUmr2r5S0r+TtoWYNKAPo0AM3gpm+whJl5Om5afbvj13pm5sf7p1XZWx+FHGOL3YjbSv6XHSvqzd8sbpyXTS3rGNSctkS+SN09UhpJYwk4CbKXA2qM3LkqaSHgf/DSDpA8A/c4bqYm61V2994H7bT1a3lzwjBPAVUm3FvUg9Ij+YN05Xy0vag/Rzbb8u7oSspF2BnYFNSKfSfwBsBOxLOoFaa93aVv3/IAZvBZI0zfb3qnelrUfpupK2t31wzmzDtBCwSu4QXZxi+zPd71aU2baPlLSa7V2r2dmSrWi7IWki6TRyyc+8XyBtnH8QOFnS5sC3SDOdxara0+1CNTtfHcQp/UDLE7ZvkrSX7R9K2iV3oC7OJb0BGXhdYkeWnUgzsgBP2z5J0hnArxkFg7cQg7dStTYa/5nyn4Dn01bDSaTHV+k1yBaVtA7wJ6olsxr0CZWkZYEJksZTdtFbgD2Ac2z/PXeQbmz/GdhG0nrV4+CXwNqSNs4cbSiHAmeRBpxflvR+4GwKH3ACz0vaBBgn6UPMGwwVyfbhQ31d0im2izmgZfvZ6vLC6vPnJD2TMdKIKfv9X39EY/qCSfql7c1z5xjNJN3J/MuOtl30bGH1grcmacn0e6Ql9f3zpuqsKn68CNAkDextu2Pj7JyqTf8N4ADgm9XNY4Av2C6tf+V8JE2xfbWkRUhLqS92/aaMJC0PrAE8CnwN+LHt8/OmWnCSrrJdRGsySTfb3mjAbQKuq2lLsvks84bV+zZwefypPxW5/SBm3sr2D0kfZf5ZoT/ljdSZpG2AfYB/AWYCJwJvBa62fXPGaB21b5CWNI4C+xS2kzTW9nXAdZKWAJYv/UUaOHDA54tlSdGbp0mP2cWqPyH97n2543eU43DS71rxbfQAbM8EZkqaDJxQtU4LI+MXkr4BHNK2TeFw4BcZM42Y6LAQM29Fk3T1gJtcyju7gSTtBGwPfJG0fNOgOtlke9N8ybqTNIm0aXpX4HbbRZbiqIqb/oRUzuLJqhjyscDWtv+QN113klYB/gPY0fZbcucZysDq/3Wg1Ch9FmmGs/Vmr7g9stXj9lTgYdKS3meAJ4Hf2t4vZ7bXorCZt4VIezc/QerD+mbSfsgv1qi4d0dLT1itbwOXWU//OWbeQu+qZsJbtpUqKN3uwGZt7/rvkPQ4BR9YqPYG7UOqTTcXmFz4C/bxwKdapwlt/0TS30iFhos9qSfpI6Sf83spvIp+m92q04Qwr9VUcacKB/h+7gA9OoRUwHtJ4PekunTPkjbThxFQtcHaX9JRwMKkg0K1mJHtRUw6xeCtSJL2Ic1gvSRpH9v/N3emHswd5MnhZNJeluJI+h3wR1L1/6uAnxY+cAMYY/u37TfYvrEqyVKcqmn3zsDtpBnCMbbrctLtY6TiwnNyB+mmOhELae9YHTxr+yngKUl32X4GQFLdBxclztD8CvgD8F1SOZYwSsTgrUw7kJYd30A6RVaHwdtCkpZoPRFXbqXcFmy3kAqbbkHan1eHt3JjO9xeagHZ/UllFH5g+85qMFcXvyf9XIsfvJHaSw3GpNOypWkv0lybJby2mdhXsX06qf1bUWy/Q9JGwC6SjgYutH1U7lzhtYvBW5meq8oUPF7qrMogTgYurhpNP0BaLj2K1B+yOLb3lrQYsB1wOqkcxN7ABbZn5U3X0c8lHQN8zfY/qwMLh5FmDkv0L8A2wPGSFid1sVjSdskFb1tuJ/WPfYR5y6arZ87UyUkDZ2QLt3Hbz3Xptuul8sbqqlMpE0NqYdjHLMNxG+l3cSVSf9baD96iSG8cWChS+8bXkjbBdiNpa9LeppVJhxZOsn1Z1lA9krQGMA3Y3vaKufMMpjrq/yVS3bTFSZvTzwSOsV1yyykkrUb18yVtTC/9VO8twMdpa5fWVjerKAOeL463XXIHi1GhOuT0Sns62zdljjQoSacD7wMuBs6wfV/mSCNiySVW7dvA5Z/P3FficngM3kok6a/AlaQnhqnVNQAF18dqnyEUbcuQJRe9lXQccLrtP1afjyv4HfR8JC1d8Czhq0haCngG2Mr2xbnzDEXShcDnSh2wtZN0te0p1XXxb/aqEhaDKvF07EBVp4L3AONJJWXuH1hTrRSSPg5cOhpOmLZ7w/hV+jZweerZ+4scvMWyaZm2a7s+NVuK4WkVYG3XGsQVe+KU1HPzm1XD9B8A5wNFD96qIr0nA2Ml/RiYYfuMzLE6qk71nkTas/djYEbeRD2ZBNwr6d7qc9veJGegIdTtHXgzd4DX6O3AWqTDTgdTdTAo1F+AG6uCyA8Ae9m+O3OmMAJi8FYg29dCKshKOq23Eumk0F0ZYw3J9lu736s8ti8ELqyWQY4Dvg28MW+qro4gNZy+CPgGaQBa7OCNdOK4TnkBPps7wDAM1jAdeGUjfWnqciq2k6dtW9J426XvS/4OMK06MLQecArpd7HWokhvDN5KdxqpBdJmwG+B6cBHsibqQNJNdJgBsD25z3F6Jmkl4HOkjfW3Mq+Zc8nm2p4lyVW/wqdzB+qibnkh7WdaknQy8ghSfbpS9wt1aphe6itc3U7HDvQ7SfuTDrScT9mvo8/ZvhPA9m2Sil5VCL0r+UEXUp2paZI2tn2ZpINyBxrCp3IHWEAXkfqDvs92HQYVkJbzjgTeVD0mSl+GrFteSCeQ9wO+Qpo5/AaF1sly1TBd0la2L2/dLmm7zt+Vj+1dcmd4LWwfXG2zmEN6s/ebzJFeRdKu1eULkr4DXAdsCNThpHdXLvZ9Sf/E4K1sC0laBqB6sij2RKHtGQCS3gZ8kraTWMCeGaMNStIKth8GdiS9459ULZ0W3T+2shfp5OavSQcApuWN01Xd8gK8BNwBLGL719UWhiJJ2orUveLTVZ9QSPsLPwr8KFuwLiQ9SvrdE7A0aeP/2/Om6k7SVwbctB7w1RxZhtDaxtIqIbMu8DwFb70JwxODt7IdStofNAm4GfhC3jg9mQ5cBmxMWvJdIm+cjvarPk5l3gsI1XXRp/VIRZxnM+8d/7aSHrJdanuhuuWF9Hg4m9Tge1vgucx5hnI78CbSTFDrMMBcUoHkYtl+pW6apJVJNQvr4K/VnwLWp8BC5Lb/c+BtkrYg9RauvdjzFqVCakHSRFJvuuL/Z0m6wvYHJX3f9q6Srrf9vty5eiVpE9vX5c4xFEk/I9V5u4m0FLIoaaboVtv75sw2mLrlBZD0ZmAj0huRqcDtth/Pm2poklqDiDGkUha/KblMz0CSbrL9ntw5hkvSz20XuVdW0pLAbqTZ74eA79kuelDfi8UWW7lvr4Vz5syIUiGhN502/0sqevN/RZKWBZaQNJ60HFInx5AGGCUbB0y1Pbd6wf6Z7Q9LujF3sA5qlVfSOqQTkT8FDiA19q5DB4MjgftJRbLXJ80QfS5roiFIOo95z3OTmDejVTRJ7Z02JpGqARRF0rqkgukfIJUyedT2pllDjaAazGO87mLwVqa6bv4HOJzU1PtsUl2h6XnjDFuR77IGeBNpQPR89WdrgLxItkRDq01eSf8H+DBp9mom8Gz151mkPWQl29j2ga2ivZKu7P4t/SfpUNtHkLYsLE/6+T5HPQbIkKoAtDxH6uFbmltIb0TXsv1CNfsdRpEYvBWobpv/B9jQ9jHV9ZuzJlkwdXhLdxJwh6S7gTWAoyUdDPwib6yO6pR3C9sbVX1v77G9MqQuBplz9WKspA2BB6vaYxNzB+pgKnCE7Wvr0BFiEFsAywJ/tT1H0hslLW57du5gbaaSlkvvqgp5j8+cZ0TFadMYvJWuLpv/231E0nGlt2PpsDQt0uCiaLbPkPQT4G3AvbafkDS21J95zfLOAahelO9vu73Yk95tpgMnALsCRwPH543TkTpcF03SOFIh7y1IS7wrSbqctKz+LQo6yWn7BuCGqkrBDsDikm4AzrJdl649YQgxeCvbbNtHSlqttfk/d6AeTCQVr3yANDhyofv0WkvTSwFP5gwyXJI2AnahmpGVtJztD2WO1VHN8i4q6a2kZdP268XzxurO9smktmlQ9sl0d7gu3VdIs22rwisHRL4LvMV2MQO3dlXtytOA0yS9A9g9c6QREXveYvBWutbm/wk12vy/Ve4AvWhbmj7H9sa58wzTd0gzANsCd5Le+ZesTnlfZt4+zZcGXBepWtIddP9goW+c3lkdVhGwZtt1qW/0Wqa0P1dUB3BWAJbJmGlIktZg/k4hR+VNFEZKDN7K1tr8fxmpwfAP8sbpyUukJ4iJpFNOd1B2Rf1Zkj5Pqo81F8B26S16/mH7PEmb2z5M0rW5A3VRm7w1HMgDHESaAfo4BQ8y26yTO8ACGmzpfHvS83OpBusUclXWRGFExOCtQJLWJzXu3pD0ru4U4AlSi5PSnQ4cC/wnKe+ZpHpZpXoC2JJUgXxl0kCz9MGbJa1F2sfSIG2eLllt8lZbEzr16C2yobft30g6C1jH9sW583TTmvWuoTmSVrXd3uP2TaQTyaWqTaeQ4Yhl0xi8lerrwOdsvyjpCNIG2XuBnwOXZk3W3aK2r6rKATQlFVmZXtKawIm2p0q6B5gArAB8M2+ynuwHrEVajjyXNLgvWZ3y7pw7wIKwXYfHbd0dDFwm6bukenqrkk507pg11dDq1CkkDEMM3so0xvYdkpYDxtu+FUBSHU68PS/pQ6SyBRtR7pPFUcCXqutHq7pYbyMtP5VYwqLdbrb3q67fmTVJb2qTtzWrUh1U2Jb5y/SMitZCYcHY/p2kzYGdSG+oZwAfqnokl2p75u8Usl3eOCMj5t1i8FaqVpubDwNXAEhahDQ7VLo9SMUhlyEVr9w7b5yOFrfdKgr6TwDb91blAEr3dklvtP2P3EF6VLe8UM1WAJuQykIsljdOKIHthyUtb3uv1m2Sptv+bM5cQ1iUtKLQakO3LqmsSa299MLM2pSYeb3E4K1MV1Q1eVYEPippVdJS0wV5Y/VkG2Bv26WX33jlxdj2x9pufzFDluFaE3hC0t+ZV45lucyZhlK3vABzbH+tvUdv7kAhL0n/ARwKLCXpE9XNY4C786Xq6rLqo/Tn4zBMMXgrkO2jJF0K/K0qaLoqcEodNiOTlpl+JakJfNf2NZnzdDJT0oa2b2ndUFWnfyxjpp60qv7XRd3yViRpIqlH72LUo0xPeB3ZPgk4SdLBtr+RO0+PZto+NHeIMPIUpzbC60HSBqSm3uvZXi13noGqPU2XAleSDoOsAmwKbG37LzmzdTOw6C1QctHb2uUFkDSFdMhiJukE9Tm2Sy58G/qkeu7YmrQkCYDto/Ml6kzS3qT+sX9o3Wb73HyJwkgZ0/0uIfRO0mKSdiTVE1qaVF+oOLYfIJViuZHU9++3wOTSB26V7wDXkIpvzgAez5qmu7rlhXRq+kTbF9ueCMSyaWi5hPTc9nzbR6k+CbwFWK/6eEfeOGGkxLJpGGnPALcAn7X959xhhmJ7DvCj3DkWQG2K3lZqk1fSlqTTeTtWtdMgvcndBrgoW7BQkodsH5Y7RI9etD0qWmKF+cXgLYwISUsA5wG3AQ8A50r6G/Bp209lDTf61KbobaVOee8i5XueeZ1B5lJ2La/QX5dJ+i/mX4qcPsT9c3pQ0gHArVQVNmxHh4VRIPa8hREh6UTglvYnMUnTgA1s75kv2ehTDYTWJxUKnQ6cYPvbeVN1Vre8AFXJmFWBtwN/LrXxeOg/SdcAfwRapW9s++B8iTprmz1uccFlTcIwxMxbGCnr2t6n/Qbb35O0W65Ao82ArhAXkY7/LwzckzfZ4OqWd4DdSYcsfgMcKuls28dlzhTK8LztUutXzsf2Tu2fS9osV5YwsuLAQhgpneqj1aFRdl0M7ArxHmAKcGC+SEOqW952O5EOsOwDvAfYIXOeUI4Zkr4s6UOSNq+6LhRF0k6SZkr6k6R1JU2QdC5Q9Ix36F3MvIWRMkvSu9q6FiDpXcCsjJlGm7p1hahb3nay/SKA7RckvZA7UCjGOGD16gPSXrJf5oszqAOAdUht3Y4CJpF6Y++cMVMYQTF4CyNlf+DSaj/IfcBbgQ+S6iGFkVG3rhB1y9vuJknnk0qEbExaPg0B27tIGkuqWfgeynxszLL9BKmzyVrAPrYvyx0qjJxYNg0jwvaDpLpp15L2Nd0CvLuqpxZGxsyqC8QrCu8KUbe8SLoAwPa+pNPTE4Dzbe+XNVgohqSjgGnAV4FDSEWcSzO37XpGDNxGnzhtGkJN1K0rRN3yAki6yvbU3DlCuSTdYPu9kq62PUXSlbY3zZ2rnaTfk5rRjwGOAb7Y+lqUChkdYvAWQo1UfTa3Ji1LPwRcYvvZvKk6q2HeGcA5g32t1HIQob8k3Qz8b2BvYE/gt7bXyZtqfoOUCGmJUiGjROx5C6FG6tYVom55gdlAM3eIULQzgROAXYHjKfAEZ6tEiKQtbP+8dbukbfKlCiMpBm8hhDDPY7bPzB0ilEfS6sCxpA4yXwKuq750U7ZQHVRt3t4N7BRt3kanGLyFEMI8v8sdIBTr+8DhpKb0l5O6hvwd+AWpc0hJos3bKBd73kIIIYQuJF1j+wPV9Y22J1fXV9j+YNZwHUSbt9ErSoWEEEII3bWX33iu7brk19HdgbNIp7zPlLRv5jxhhMTMWwghhNCFpL+Syt4ImNp2PcX2sjmzdSLpJmAT2y9KWhi4wfYGuXOF1y72vIUQQgjdbdd2fWqH69JEm7dRKgZvIYQQQhe2r82dYQFEm7dRKpZNQwghhFFE0gW2t6+u/410YOGPti/JmyyMlBi8hRBCCKNItHkb/WLwFkIIIYwi0eZt9Is9byGEEMLoEm3eRrkYvIUQQgijS7R5G+VKLi4YQgghhOGLNm+jXOx5CyGEEEKokZh5CyGEEEKokRi8hRBCCCHUSAzeQgghhBBqJAZvIYQQQgg1EoO3EEIIIYQa+X+EV2HJRYsvOAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 720x720 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#与saleprice 相关性最大的10个特征\n",
    "k = 10  \n",
    "cols = train_data_corr.nlargest(k,'SalePrice')['SalePrice'].index  #取出与saleprice相关性最大的十项  \n",
    "cm = np.corrcoef(train_data[cols].values.T)  #相关系数   \n",
    "plt.subplots(figsize = (10,10))\n",
    "sns.set(font_scale = 1.25)  \n",
    "hm = sns.heatmap(cm,cbar = True,annot = True,square = True ,fmt = '.2f',annot_kws = {'size': 10},yticklabels = cols.values,xticklabels = cols.values)  \n",
    "plt.show() "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 异常值处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# # y数据标准化\n",
    "# from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# saleprice_scaled = StandardScaler().fit_transform(y_train[:,np.newaxis])  \n",
    "# low_range = saleprice_scaled[saleprice_scaled[:,0].argsort()][:10]  \n",
    "# high_range = saleprice_scaled[saleprice_scaled[:,0].argsort()][-10:]  \n",
    "# print('outer range(low) of the distribution :','\\n',low_range)  \n",
    "# print ('outer range (high) of the distribution :','\\n',high_range)  \n",
    "# sns.distplot(saleprice_scaled)  \n",
    " "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 分析GrLivArea与SalePrice\n",
    "plt.scatter(train_data.GrLivArea, train_data.SalePrice, c = \"blue\", marker = \"s\")\n",
    "plt.title(\"Looking for outliers\")\n",
    "plt.xlabel(\"GrLivArea\")\n",
    "plt.ylabel(\"SalePrice\")\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "小结：   \n",
    "GrLivArea与SalePrice的散点图中，GrLivArea大于4000时有四个离群点，予以剔除。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "#删除离群点 \n",
    "train_data = x_train\n",
    "train_data['SalePrice'] = y_train\n",
    "test_data = x_test\n",
    "\n",
    "train_data = train_data[train_data.GrLivArea < 0.7]\n",
    "y_train = train_data['SalePrice']\n",
    "x_train = train_data.drop('SalePrice', axis = 1, inplace = False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3、确定模型类型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1 最小二乘线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE on Training set : 0.2367727263431146\n"
     ]
    }
   ],
   "source": [
    "# 线性回归\n",
    "#class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "# 使用默认配置初始化\n",
    "lr = LinearRegression()\n",
    "\n",
    "# 训练模型参数\n",
    "lr.fit(x_train, y_train)\n",
    "\n",
    "# 预测\n",
    "# y_test_pred_lr = lr.predict(x_test)\n",
    "y_train_pred_lr = lr.predict(x_train)\n",
    "\n",
    "columns = x_train.columns\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef\":list((lr.coef_.T))})\n",
    "fs.sort_values(by=['coef'],ascending=False)\n",
    "\n",
    "rmse_train = np.sqrt(mean_squared_error(y_train,y_train_pred_lr))\n",
    "\n",
    "print(\"RMSE on Training set :\", rmse_train)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1 岭回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best alpha : 1.0\n",
      "cv of rmse : 0.29198370567877746\n",
      "RMSE on Training set : 0.243424301411749\n"
     ]
    }
   ],
   "source": [
    "#岭回归／L2正则\n",
    "#class sklearn.linear_model.RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, \n",
    "#                                  normalize=False, scoring=None, cv=None, gcv_mode=None, \n",
    "#                                  store_cv_values=False)\n",
    "from sklearn.linear_model import  RidgeCV\n",
    "\n",
    "#设置超参数（正则参数）范围\n",
    "alphas = [ 0.001, 0.01, 0.1, 1, 10,100, 1000]\n",
    "# alphas = [ 0.01, 0.1, 1, 10, 100]\n",
    "# n_alphas = 20\n",
    "# alphas = np.logspace(-5,2,n_alphas)\n",
    "\n",
    "#生成一个RidgeCV实例\n",
    "ridge = RidgeCV(alphas=alphas, store_cv_values=True)  \n",
    "\n",
    "#模型训练\n",
    "# RidgeCV采用的是广义交叉验证（Generalized Cross-Validation），留一交叉验证（N-折交叉验证）的一种有效实现方式\n",
    "ridge.fit(x_train, y_train)    \n",
    "\n",
    "#预测\n",
    "# y_test_pred_ridge = ridge.predict(x_test)\n",
    "y_train_pred_ridge = ridge.predict(x_train)\n",
    "\n",
    "#通过交叉验证得到的最佳超参数alpha\n",
    "alpha = ridge.alpha_\n",
    "print(\"Best alpha :\", alpha)\n",
    "\n",
    "# 交叉验证估计的测试误差\n",
    "mse_cv = np.mean(ridge.cv_values_, axis = 0)\n",
    "rmse_cv = np.sqrt(mse_cv)\n",
    "print(\"cv of rmse :\", min(rmse_cv))\n",
    "\n",
    "#训练上测试，训练误差\n",
    "y_train_rdg = ridge.predict(x_train)\n",
    "rmse_train = np.sqrt(mean_squared_error(y_train,y_train_rdg))\n",
    "print(\"RMSE on Training set :\", rmse_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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119/jY8++ggffvghvv32W+zZswfz5s276f7b29vtHq5UW1trC6xbKSsrw+uvv4733nsPp06dwkcffTTkkyEtFgufWUKjxp8gIgBTpkxBbGws3njjDXR3d+PatWt48803sXTpUkRERODf/u3f8M0336CgoABmsxl5eXkoKSmxrR8WFobGxkbbdGdnJyQSCby8vGC1WnHixAnk5eXZXci+UV9fH9555x0YjUZUVlZiz549ePTRR4etu6OjA2Kx2PaAr3PnzuGjjz4atJ+mpiaEhYWNZGiIbHhKigiARCLBrl278NZbb2H16tWwWCxITk7GCy+8AKD/GsArr7yCF198Ed3d3VixYgUWLFhgO8V0zz332H10dcOGDTh79izWrVsHiUSC2NhYpKen49NPP71paPj6+iI5ORkikQhpaWl46qmnhq17+fLlSEtLw+OPPw6LxYLIyEg8/vjjyMnJwbVr1xAUFAQAOHv2LJYvXz7KUaLJjs/DIHJAVVUVANg9TnXDhg3YuHEjHnnkEZhMJqxatQoffPCB3cVwR5w+fRpPPvkkrly5MqY1X2c0GpGUlISPPvoIs2bNEmQfNDnwlBSRA8rLy7Fp0yZotVpYrVbk5+ejoqICy5YtA9B/IfrZZ5/Fhx9+6OJKB/v888+xYsUKhgWNGk9JETlgzZo1uHz5Mh577DF0dXVhxowZeP/99xEZGWlb5vp1jrKyMqePMoTS3d2NTz75BHv27HF1KeQBeEqKiIgcwlNSRETkEAYGERE5hIFBREQOYWAQEZFDGBhEROSQ/w9cdcEVFWBJnAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_ridge</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>257</th>\n",
       "      <td>GrLivArea</td>\n",
       "      <td>1.294093</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>254</th>\n",
       "      <td>1stFlrSF</td>\n",
       "      <td>1.212792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>244</th>\n",
       "      <td>LotArea</td>\n",
       "      <td>1.121277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>250</th>\n",
       "      <td>BsmtFinSF1</td>\n",
       "      <td>1.015068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>253</th>\n",
       "      <td>TotalBsmtSF</td>\n",
       "      <td>1.001538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>255</th>\n",
       "      <td>2ndFlrSF</td>\n",
       "      <td>0.764890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>245</th>\n",
       "      <td>OverallQual</td>\n",
       "      <td>0.749736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>211</th>\n",
       "      <td>GarageQual_Ex</td>\n",
       "      <td>0.495538</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>Neighborhood_StoneBr</td>\n",
       "      <td>0.476313</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>246</th>\n",
       "      <td>OverallCond</td>\n",
       "      <td>0.460767</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249</th>\n",
       "      <td>MasVnrArea</td>\n",
       "      <td>0.391981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>264</th>\n",
       "      <td>TotRmsAbvGrd</td>\n",
       "      <td>0.378434</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>247</th>\n",
       "      <td>YearBuilt</td>\n",
       "      <td>0.360803</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>Neighborhood_NoRidge</td>\n",
       "      <td>0.336557</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>267</th>\n",
       "      <td>GarageCars</td>\n",
       "      <td>0.286244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>91</th>\n",
       "      <td>RoofMatl_WdShngl</td>\n",
       "      <td>0.270826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>268</th>\n",
       "      <td>GarageArea</td>\n",
       "      <td>0.266874</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>279</th>\n",
       "      <td>PoolArea</td>\n",
       "      <td>0.243122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>RoofMatl_Membran</td>\n",
       "      <td>0.235711</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>Neighborhood_Crawfor</td>\n",
       "      <td>0.211689</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>189</th>\n",
       "      <td>KitchenQual_Ex</td>\n",
       "      <td>0.210013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>Neighborhood_NridgHt</td>\n",
       "      <td>0.208455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199</th>\n",
       "      <td>Functional_Typ</td>\n",
       "      <td>0.205426</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278</th>\n",
       "      <td>ScreenPorch</td>\n",
       "      <td>0.205213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>154</th>\n",
       "      <td>BsmtExposure_Gd</td>\n",
       "      <td>0.203440</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>Exterior1st_BrkFace</td>\n",
       "      <td>0.195624</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>260</th>\n",
       "      <td>FullBath</td>\n",
       "      <td>0.192501</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>Condition2_PosA</td>\n",
       "      <td>0.185823</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>275</th>\n",
       "      <td>OpenPorchSF</td>\n",
       "      <td>0.182110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>277</th>\n",
       "      <td>3SsnPorch</td>\n",
       "      <td>0.181416</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>Neighborhood_Gilbert</td>\n",
       "      <td>-0.116946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>118</th>\n",
       "      <td>Exterior2nd_Stone</td>\n",
       "      <td>-0.120969</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>RoofMatl_Roll</td>\n",
       "      <td>-0.122311</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>Neighborhood_OldTown</td>\n",
       "      <td>-0.125902</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>RoofMatl_CompShg</td>\n",
       "      <td>-0.128405</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>116</th>\n",
       "      <td>Exterior2nd_Other</td>\n",
       "      <td>-0.128571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>243</th>\n",
       "      <td>MSSubClass</td>\n",
       "      <td>-0.129468</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>242</th>\n",
       "      <td>Utilities_NoSeWa</td>\n",
       "      <td>-0.130660</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>234</th>\n",
       "      <td>SaleType_WD</td>\n",
       "      <td>-0.134107</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>215</th>\n",
       "      <td>GarageQual_Po</td>\n",
       "      <td>-0.139456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>LandSlope_Sev</td>\n",
       "      <td>-0.139474</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Street_Grvl</td>\n",
       "      <td>-0.140879</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>216</th>\n",
       "      <td>GarageQual_TA</td>\n",
       "      <td>-0.142668</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>142</th>\n",
       "      <td>Foundation_Wood</td>\n",
       "      <td>-0.144334</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>Neighborhood_NAmes</td>\n",
       "      <td>-0.144407</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>175</th>\n",
       "      <td>Heating_OthW</td>\n",
       "      <td>-0.154568</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>Neighborhood_NWAmes</td>\n",
       "      <td>-0.157104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>Condition2_PosN</td>\n",
       "      <td>-0.160821</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>Neighborhood_Edwards</td>\n",
       "      <td>-0.163921</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Neighborhood_Mitchel</td>\n",
       "      <td>-0.184453</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>212</th>\n",
       "      <td>GarageQual_Fa</td>\n",
       "      <td>-0.188737</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>200</th>\n",
       "      <td>GarageType_2Types</td>\n",
       "      <td>-0.194757</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>Condition1_RRAe</td>\n",
       "      <td>-0.198950</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>RoofMatl_Tar&amp;Grv</td>\n",
       "      <td>-0.200704</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>198</th>\n",
       "      <td>Functional_Sev</td>\n",
       "      <td>-0.209061</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>62</th>\n",
       "      <td>Condition2_RRAe</td>\n",
       "      <td>-0.209779</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>MSZoning_C (all)</td>\n",
       "      <td>-0.259702</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>217</th>\n",
       "      <td>GarageCond_Ex</td>\n",
       "      <td>-0.272623</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>262</th>\n",
       "      <td>BedroomAbvGr</td>\n",
       "      <td>-0.302791</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>263</th>\n",
       "      <td>KitchenAbvGr</td>\n",
       "      <td>-0.334811</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>280 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                  columns  coef_ridge\n",
       "257             GrLivArea    1.294093\n",
       "254              1stFlrSF    1.212792\n",
       "244               LotArea    1.121277\n",
       "250            BsmtFinSF1    1.015068\n",
       "253           TotalBsmtSF    1.001538\n",
       "255              2ndFlrSF    0.764890\n",
       "245           OverallQual    0.749736\n",
       "211         GarageQual_Ex    0.495538\n",
       "45   Neighborhood_StoneBr    0.476313\n",
       "246           OverallCond    0.460767\n",
       "249            MasVnrArea    0.391981\n",
       "264          TotRmsAbvGrd    0.378434\n",
       "247             YearBuilt    0.360803\n",
       "38   Neighborhood_NoRidge    0.336557\n",
       "267            GarageCars    0.286244\n",
       "91       RoofMatl_WdShngl    0.270826\n",
       "268            GarageArea    0.266874\n",
       "279              PoolArea    0.243122\n",
       "86       RoofMatl_Membran    0.235711\n",
       "29   Neighborhood_Crawfor    0.211689\n",
       "189        KitchenQual_Ex    0.210013\n",
       "39   Neighborhood_NridgHt    0.208455\n",
       "199        Functional_Typ    0.205426\n",
       "278           ScreenPorch    0.205213\n",
       "154       BsmtExposure_Gd    0.203440\n",
       "95    Exterior1st_BrkFace    0.195624\n",
       "260              FullBath    0.192501\n",
       "60        Condition2_PosA    0.185823\n",
       "275           OpenPorchSF    0.182110\n",
       "277             3SsnPorch    0.181416\n",
       "..                    ...         ...\n",
       "31   Neighborhood_Gilbert   -0.116946\n",
       "118     Exterior2nd_Stone   -0.120969\n",
       "88          RoofMatl_Roll   -0.122311\n",
       "40   Neighborhood_OldTown   -0.125902\n",
       "85       RoofMatl_CompShg   -0.128405\n",
       "116     Exterior2nd_Other   -0.128571\n",
       "243            MSSubClass   -0.129468\n",
       "242      Utilities_NoSeWa   -0.130660\n",
       "234           SaleType_WD   -0.134107\n",
       "215         GarageQual_Po   -0.139456\n",
       "22          LandSlope_Sev   -0.139474\n",
       "5             Street_Grvl   -0.140879\n",
       "216         GarageQual_TA   -0.142668\n",
       "142       Foundation_Wood   -0.144334\n",
       "35     Neighborhood_NAmes   -0.144407\n",
       "175          Heating_OthW   -0.154568\n",
       "37    Neighborhood_NWAmes   -0.157104\n",
       "61        Condition2_PosN   -0.160821\n",
       "30   Neighborhood_Edwards   -0.163921\n",
       "34   Neighborhood_Mitchel   -0.184453\n",
       "212         GarageQual_Fa   -0.188737\n",
       "200     GarageType_2Types   -0.194757\n",
       "53        Condition1_RRAe   -0.198950\n",
       "89       RoofMatl_Tar&Grv   -0.200704\n",
       "198        Functional_Sev   -0.209061\n",
       "62        Condition2_RRAe   -0.209779\n",
       "0        MSZoning_C (all)   -0.259702\n",
       "217         GarageCond_Ex   -0.272623\n",
       "262          BedroomAbvGr   -0.302791\n",
       "263          KitchenAbvGr   -0.334811\n",
       "\n",
       "[280 rows x 2 columns]"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "\n",
    "# 看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef_ridge\":list((ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef_ridge'],ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1 LASSO"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best alpha : 0.0005025398536576164\n",
      "cv of rmse : 0.43878218876759073\n",
      "RMSE on Training set : 0.25038111939793656\n"
     ]
    }
   ],
   "source": [
    "#### Lasso／L1正则\n",
    "# class sklearn.linear_model.LassoCV(eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, \n",
    "#                                    normalize=False, precompute=’auto’, max_iter=1000, \n",
    "#                                    tol=0.0001, copy_X=True, cv=None, verbose=False, n_jobs=1,\n",
    "#                                    positive=False, random_state=None, selection=’cyclic’)\n",
    "from sklearn.linear_model import LassoCV\n",
    "\n",
    "#设置超参数搜索范围\n",
    "# alphas = [ 0.01, 0.1, 1, 10,100]\n",
    "\n",
    "#生成一个LassoCV实例\n",
    "# lasso = LassoCV(alphas=alphas)  \n",
    "# lasso = LassoCV()  \n",
    "lasso = LassoCV(eps=0.0001, n_alphas=1000, max_iter=5000) \n",
    "\n",
    "#训练（内含CV）\n",
    "lasso.fit(x_train, y_train)  \n",
    "\n",
    "#测试\n",
    "# y_test_pred_lasso = lasso.predict(x_test)\n",
    "y_train_pred_lasso = lasso.predict(x_train)\n",
    "            \n",
    "alpha = lasso.alpha_\n",
    "print(\"Best alpha :\", alpha)\n",
    "\n",
    "mse_cv = np.mean(lasso.mse_path_, axis = 0)\n",
    "rmse_cv = np.sqrt(mse_cv)\n",
    "print(\"cv of rmse :\", min(rmse_cv))\n",
    "\n",
    "y_train_lasso = lasso.predict(x_train)\n",
    "rmse_train = np.sqrt(mean_squared_error(y_train,y_train_lasso))\n",
    "print(\"RMSE on Training set :\", rmse_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>coef_lasso</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>257</th>\n",
       "      <td>GrLivArea</td>\n",
       "      <td>1.294093</td>\n",
       "      <td>3.462442</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>244</th>\n",
       "      <td>LotArea</td>\n",
       "      <td>1.121277</td>\n",
       "      <td>1.223749</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>253</th>\n",
       "      <td>TotalBsmtSF</td>\n",
       "      <td>1.001538</td>\n",
       "      <td>1.099257</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>250</th>\n",
       "      <td>BsmtFinSF1</td>\n",
       "      <td>1.015068</td>\n",
       "      <td>0.900283</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>245</th>\n",
       "      <td>OverallQual</td>\n",
       "      <td>0.749736</td>\n",
       "      <td>0.800590</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>Neighborhood_StoneBr</td>\n",
       "      <td>0.476313</td>\n",
       "      <td>0.486352</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>246</th>\n",
       "      <td>OverallCond</td>\n",
       "      <td>0.460767</td>\n",
       "      <td>0.454927</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>247</th>\n",
       "      <td>YearBuilt</td>\n",
       "      <td>0.360803</td>\n",
       "      <td>0.380432</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>Neighborhood_NoRidge</td>\n",
       "      <td>0.336557</td>\n",
       "      <td>0.364707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249</th>\n",
       "      <td>MasVnrArea</td>\n",
       "      <td>0.391981</td>\n",
       "      <td>0.350018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>267</th>\n",
       "      <td>GarageCars</td>\n",
       "      <td>0.286244</td>\n",
       "      <td>0.281917</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>189</th>\n",
       "      <td>KitchenQual_Ex</td>\n",
       "      <td>0.210013</td>\n",
       "      <td>0.280241</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>128</th>\n",
       "      <td>ExterQual_Ex</td>\n",
       "      <td>0.176797</td>\n",
       "      <td>0.271209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>91</th>\n",
       "      <td>RoofMatl_WdShngl</td>\n",
       "      <td>0.270826</td>\n",
       "      <td>0.264864</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>Neighborhood_Crawfor</td>\n",
       "      <td>0.211689</td>\n",
       "      <td>0.250326</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>154</th>\n",
       "      <td>BsmtExposure_Gd</td>\n",
       "      <td>0.203440</td>\n",
       "      <td>0.244340</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>Neighborhood_NridgHt</td>\n",
       "      <td>0.208455</td>\n",
       "      <td>0.240887</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>211</th>\n",
       "      <td>GarageQual_Ex</td>\n",
       "      <td>0.495538</td>\n",
       "      <td>0.219766</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>65</th>\n",
       "      <td>BldgType_1Fam</td>\n",
       "      <td>0.127606</td>\n",
       "      <td>0.208353</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>95</th>\n",
       "      <td>Exterior1st_BrkFace</td>\n",
       "      <td>0.195624</td>\n",
       "      <td>0.185479</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>278</th>\n",
       "      <td>ScreenPorch</td>\n",
       "      <td>0.205213</td>\n",
       "      <td>0.184346</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>268</th>\n",
       "      <td>GarageArea</td>\n",
       "      <td>0.266874</td>\n",
       "      <td>0.183632</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>143</th>\n",
       "      <td>BsmtQual_Ex</td>\n",
       "      <td>0.149764</td>\n",
       "      <td>0.183275</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>199</th>\n",
       "      <td>Functional_Typ</td>\n",
       "      <td>0.205426</td>\n",
       "      <td>0.179033</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>269</th>\n",
       "      <td>WoodDeckSF</td>\n",
       "      <td>0.095031</td>\n",
       "      <td>0.159193</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>264</th>\n",
       "      <td>TotRmsAbvGrd</td>\n",
       "      <td>0.378434</td>\n",
       "      <td>0.156240</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>275</th>\n",
       "      <td>OpenPorchSF</td>\n",
       "      <td>0.182110</td>\n",
       "      <td>0.130465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>232</th>\n",
       "      <td>SaleType_New</td>\n",
       "      <td>0.171865</td>\n",
       "      <td>0.125332</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>LotConfig_CulDSac</td>\n",
       "      <td>0.144301</td>\n",
       "      <td>0.121816</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>258</th>\n",
       "      <td>BsmtFullBath</td>\n",
       "      <td>0.132794</td>\n",
       "      <td>0.105747</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>LandContour_Low</td>\n",
       "      <td>-0.091718</td>\n",
       "      <td>-0.047996</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>131</th>\n",
       "      <td>ExterQual_TA</td>\n",
       "      <td>-0.114615</td>\n",
       "      <td>-0.048235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>Neighborhood_Timber</td>\n",
       "      <td>-0.098034</td>\n",
       "      <td>-0.048296</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>BsmtFinType1_LwQ</td>\n",
       "      <td>-0.063893</td>\n",
       "      <td>-0.049556</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>193</th>\n",
       "      <td>Functional_Maj1</td>\n",
       "      <td>-0.058267</td>\n",
       "      <td>-0.051607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>156</th>\n",
       "      <td>BsmtExposure_No</td>\n",
       "      <td>-0.102535</td>\n",
       "      <td>-0.053020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>145</th>\n",
       "      <td>BsmtQual_Gd</td>\n",
       "      <td>-0.077612</td>\n",
       "      <td>-0.055021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>226</th>\n",
       "      <td>SaleType_COD</td>\n",
       "      <td>-0.113704</td>\n",
       "      <td>-0.058843</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>LotConfig_FR2</td>\n",
       "      <td>-0.074693</td>\n",
       "      <td>-0.059360</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>BsmtCond_Fa</td>\n",
       "      <td>-0.083072</td>\n",
       "      <td>-0.061854</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>Neighborhood_NAmes</td>\n",
       "      <td>-0.144407</td>\n",
       "      <td>-0.064101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>MSZoning_RM</td>\n",
       "      <td>-0.003009</td>\n",
       "      <td>-0.065529</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>Neighborhood_Edwards</td>\n",
       "      <td>-0.163921</td>\n",
       "      <td>-0.068386</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>Neighborhood_NWAmes</td>\n",
       "      <td>-0.157104</td>\n",
       "      <td>-0.071225</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>RoofMatl_Tar&amp;Grv</td>\n",
       "      <td>-0.200704</td>\n",
       "      <td>-0.071659</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>123</th>\n",
       "      <td>MasVnrType_BrkCmn</td>\n",
       "      <td>-0.095533</td>\n",
       "      <td>-0.075868</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>105</th>\n",
       "      <td>Exterior1st_Wd Sdng</td>\n",
       "      <td>-0.098950</td>\n",
       "      <td>-0.088031</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>234</th>\n",
       "      <td>SaleType_WD</td>\n",
       "      <td>-0.134107</td>\n",
       "      <td>-0.095358</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>235</th>\n",
       "      <td>SaleCondition_Abnorml</td>\n",
       "      <td>-0.062910</td>\n",
       "      <td>-0.095770</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>200</th>\n",
       "      <td>GarageType_2Types</td>\n",
       "      <td>-0.194757</td>\n",
       "      <td>-0.100399</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>216</th>\n",
       "      <td>GarageQual_TA</td>\n",
       "      <td>-0.142668</td>\n",
       "      <td>-0.103616</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>256</th>\n",
       "      <td>LowQualFinSF</td>\n",
       "      <td>0.007343</td>\n",
       "      <td>-0.112138</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>Neighborhood_Mitchel</td>\n",
       "      <td>-0.184453</td>\n",
       "      <td>-0.112275</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Street_Grvl</td>\n",
       "      <td>-0.140879</td>\n",
       "      <td>-0.137281</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>53</th>\n",
       "      <td>Condition1_RRAe</td>\n",
       "      <td>-0.198950</td>\n",
       "      <td>-0.144418</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>LandSlope_Sev</td>\n",
       "      <td>-0.139474</td>\n",
       "      <td>-0.145051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>212</th>\n",
       "      <td>GarageQual_Fa</td>\n",
       "      <td>-0.188737</td>\n",
       "      <td>-0.148661</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>263</th>\n",
       "      <td>KitchenAbvGr</td>\n",
       "      <td>-0.334811</td>\n",
       "      <td>-0.219182</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>MSZoning_C (all)</td>\n",
       "      <td>-0.259702</td>\n",
       "      <td>-0.250017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>262</th>\n",
       "      <td>BedroomAbvGr</td>\n",
       "      <td>-0.302791</td>\n",
       "      <td>-0.252748</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>280 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                   columns  coef_ridge  coef_lasso\n",
       "257              GrLivArea    1.294093    3.462442\n",
       "244                LotArea    1.121277    1.223749\n",
       "253            TotalBsmtSF    1.001538    1.099257\n",
       "250             BsmtFinSF1    1.015068    0.900283\n",
       "245            OverallQual    0.749736    0.800590\n",
       "45    Neighborhood_StoneBr    0.476313    0.486352\n",
       "246            OverallCond    0.460767    0.454927\n",
       "247              YearBuilt    0.360803    0.380432\n",
       "38    Neighborhood_NoRidge    0.336557    0.364707\n",
       "249             MasVnrArea    0.391981    0.350018\n",
       "267             GarageCars    0.286244    0.281917\n",
       "189         KitchenQual_Ex    0.210013    0.280241\n",
       "128           ExterQual_Ex    0.176797    0.271209\n",
       "91        RoofMatl_WdShngl    0.270826    0.264864\n",
       "29    Neighborhood_Crawfor    0.211689    0.250326\n",
       "154        BsmtExposure_Gd    0.203440    0.244340\n",
       "39    Neighborhood_NridgHt    0.208455    0.240887\n",
       "211          GarageQual_Ex    0.495538    0.219766\n",
       "65           BldgType_1Fam    0.127606    0.208353\n",
       "95     Exterior1st_BrkFace    0.195624    0.185479\n",
       "278            ScreenPorch    0.205213    0.184346\n",
       "268             GarageArea    0.266874    0.183632\n",
       "143            BsmtQual_Ex    0.149764    0.183275\n",
       "199         Functional_Typ    0.205426    0.179033\n",
       "269             WoodDeckSF    0.095031    0.159193\n",
       "264           TotRmsAbvGrd    0.378434    0.156240\n",
       "275            OpenPorchSF    0.182110    0.130465\n",
       "232           SaleType_New    0.171865    0.125332\n",
       "16       LotConfig_CulDSac    0.144301    0.121816\n",
       "258           BsmtFullBath    0.132794    0.105747\n",
       "..                     ...         ...         ...\n",
       "13         LandContour_Low   -0.091718   -0.047996\n",
       "131           ExterQual_TA   -0.114615   -0.048235\n",
       "46     Neighborhood_Timber   -0.098034   -0.048296\n",
       "160       BsmtFinType1_LwQ   -0.063893   -0.049556\n",
       "193        Functional_Maj1   -0.058267   -0.051607\n",
       "156        BsmtExposure_No   -0.102535   -0.053020\n",
       "145            BsmtQual_Gd   -0.077612   -0.055021\n",
       "226           SaleType_COD   -0.113704   -0.058843\n",
       "17           LotConfig_FR2   -0.074693   -0.059360\n",
       "148            BsmtCond_Fa   -0.083072   -0.061854\n",
       "35      Neighborhood_NAmes   -0.144407   -0.064101\n",
       "4              MSZoning_RM   -0.003009   -0.065529\n",
       "30    Neighborhood_Edwards   -0.163921   -0.068386\n",
       "37     Neighborhood_NWAmes   -0.157104   -0.071225\n",
       "89        RoofMatl_Tar&Grv   -0.200704   -0.071659\n",
       "123      MasVnrType_BrkCmn   -0.095533   -0.075868\n",
       "105    Exterior1st_Wd Sdng   -0.098950   -0.088031\n",
       "234            SaleType_WD   -0.134107   -0.095358\n",
       "235  SaleCondition_Abnorml   -0.062910   -0.095770\n",
       "200      GarageType_2Types   -0.194757   -0.100399\n",
       "216          GarageQual_TA   -0.142668   -0.103616\n",
       "256           LowQualFinSF    0.007343   -0.112138\n",
       "34    Neighborhood_Mitchel   -0.184453   -0.112275\n",
       "5              Street_Grvl   -0.140879   -0.137281\n",
       "53         Condition1_RRAe   -0.198950   -0.144418\n",
       "22           LandSlope_Sev   -0.139474   -0.145051\n",
       "212          GarageQual_Fa   -0.188737   -0.148661\n",
       "263           KitchenAbvGr   -0.334811   -0.219182\n",
       "0         MSZoning_C (all)   -0.259702   -0.250017\n",
       "262           BedroomAbvGr   -0.302791   -0.252748\n",
       "\n",
       "[280 rows x 3 columns]"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(lasso.alphas_), mses) \n",
    "#plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()    \n",
    "\n",
    "\n",
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(columns), \"coef_ridge\":list((ridge.coef_.T)), \"coef_lasso\":list((lasso.coef_.T))})\n",
    "fs.sort_values(by=['coef_lasso'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
